2017年9月27日 星期三

java blocking IO read 不支援 interrupt

一直以為 java 所有的 blocking operation 是可以用 thread.interrupt() method 中斷的,但是後來才發現  java 原本的 blocking IO library 是不支援 interrupt 的,例如去 read 一個 socket,然後用 thread.interrupt() 去中斷呼叫 read 的 thread,會發現 read 並沒有被中斷

新的 File library 像是 java.nio 才有支援 interrupt,而原本的 IO library 就要考慮其它的方式來中斷一個 blocking read,例如把 socket close,或是去 polling 是否 data available,若 data available 再呼叫 blocking read method

沒有留言:

張貼留言