对于以下代码,
static class SleeperThread extends Thread {
public void run() {
int c;
try {
c = System.in.read();
}
...
}
}
如此bug中所述,如果线程在IO(System.in.read();
)上被阻止,那么,是否可以通过另一个线程在该线程上设置中断标志?
答案 0 :(得分:1)
由于System.in
对线程中断没有反应,你必须自己实现类似的东西。
为此,您可以使用available()
(System.in
)的方法InputStream
。
看起来可能有点像这样:
class ReadWithInterrupt extends Thread{
private byte[] result = null;
public byte[] getResult(){
return result;
}
@Override
public void run(){
try{
while(true){
if (this.isInterrupted()){
System.out.println("An interrupt occurred");
break;
}
int available = System.in.available();
if (available>0){
result = new byte[available];
System.in.read(result, 0, available);
break;
}
else
Thread.sleep(500);
}
}
catch (IOException e){
e.printStackTrace();
}
catch (InterruptedException e){
System.out.println("An interrupt occurred");
}
}
}