paip.java 线程无限wait的解决
jprofl>threads>thread dump>
查看棉线程执行的code stack... 估计是.比如.BlockingQueue.wait
作者Attilax 艾龙, EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.youkuaiyun.com/attilax
解决:
1.使用poll,取代tack
poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null
2.take前判断哈BlockingQueue.size ,n是使用孪这个.
if (Sqlqueue.size() == 0) {
Thread.sleep(10);
continue;// cbb
}
str = Sqlqueue.take();
3.主线程exit前join其他线程...
try {
tdcba.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("---finish");
参考:
Java多线程(五)之BlockingQueue深入分析 - JAVA编程语言程序开发技术文章 - 红黑联盟.htm
jprofl>threads>thread dump>
查看棉线程执行的code stack... 估计是.比如.BlockingQueue.wait
作者Attilax 艾龙, EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.youkuaiyun.com/attilax
解决:
1.使用poll,取代tack
poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null
2.take前判断哈BlockingQueue.size ,n是使用孪这个.
if (Sqlqueue.size() == 0) {
Thread.sleep(10);
continue;// cbb
}
str = Sqlqueue.take();
3.主线程exit前join其他线程...
try {
tdcba.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("---finish");
参考:
Java多线程(五)之BlockingQueue深入分析 - JAVA编程语言程序开发技术文章 - 红黑联盟.htm
本文探讨了Java中线程无限等待的问题,并提供了几种解决策略,包括使用poll替代take、在调用take前检查队列大小及主线程退出前等待其他线程完成。
3643

被折叠的 条评论
为什么被折叠?



