阻塞线程怎么回收

拍码屁 2017-01-19 02:41:19
如下的简单代码,线程中的while循环体有一BlockingQueue的take方法一直阻塞,本应该通过一个bool值可以结束循环,但问题是它会阻塞,有什么办法可以解决吗? 我用interupt结束的话,会catch到异常。

private class TestThread extends Thread{

private boolean isTesting;

public void stopRunning(){
isTesting=false;
}

@Override
public void run() {
isTesting=true;
while(isTesting){
try{

String str=(String)testQueue.take();
//do something
}catch (Exception e){

}
}
}
}
...全文
261 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
etnet 2017-01-20
  • 打赏
  • 举报
回复
发送interupt捕获异常不行吗?这不本就是JAVA中线程间的合作方式啊.
oO临时工Oo 2017-01-19
  • 打赏
  • 举报
回复
或者用poll(long timeout, TimeUnit unit)方法,其中第一个参数指定超时时间,多少时间后没有得到数据,会自动返回。 timeout 超时时间 TimeUnit 时间单位 c.poll(10, TimeUnit.SECONDS);  表示 10秒没数据则返回
oO临时工Oo 2017-01-19
  • 打赏
  • 举报
回复
testQueue具体是哪个类的实例:ArrayBlockingQueue、LinkedBlockingDeque、DelayQueue....??

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧