作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于下面的代码,
static class SleeperThread extends Thread {
public void run() {
int c;
try {
c = System.in.read();
}
...
}
}
正如本文中提到的bug ,如果一个线程在 IO(System.in.read();
) 上被阻塞,那么,不能由另一个线程在该线程上设置中断标志吗?
最佳答案
由于 System.in
不对线程中断使用react,因此您必须自己实现类似的东西。
为此,您可以使用 System.in
(InputStream
)的 available()
方法。
它可能看起来有点像这样:
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");
}
}
}
关于java - 在线程上设置中断标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47593756/
我是一名优秀的程序员,十分优秀!