Java 线程中如何实现休眠功能的线程安全

49 天前
 NxxRngjnbgj

最近开始接手 Java 的项目,目前代码问题涉及到线程相关的内容,先说一下现状是
1 、线程是通过 new Thread().start 去启动的
2 、线程过一段时间就会假死
想咨询一下如何保证线程不假死,示例如下

public class thread1 implements Runnable {
	
    @Override
     public void run() {
     	while (true) {
        	try {
                if (condition) {
               	    // 代码
                    .......
                    
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        sout(e)
                    }
                } else {
                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        sout(e)
                    }
                }
            } catch (Exception e) {
            
            }
        }
    }

像这种一个线程逻辑里面,根据判断条件有多个休眠的,有什么好解决方案没,我查了一下 Timer 和 ScheduledExecutorService ,好像都不太符合,TimeUnit.时间单位.sleep 的底层好像也是 Thread.sleep 实现的,直接使用 ThreadPoolExecutor 去管理线程会不会有效,大家可以说说自己的看法

1059 次点击
所在节点    Java
7 条回复
Rickkkkkkk
49 天前
啥叫假死?

感觉你在提 AB 问题

直接说具体需求吧
NxxRngjnbgj
49 天前
@Rickkkkkkk 就是线程一直在写库,写着写着就不写了。重启 jar 包又好了,但是时间是不确定的
Rickkkkkkk
49 天前
@NxxRngjnbgj 内部抛异常整个线程没了吧。
NxxRngjnbgj
49 天前
@Rickkkkkkk 目前日志抛的是 StackOverFlow
Rickkkkkkk
49 天前
@NxxRngjnbgj 检查下是不是哪里循环调用了

你这问题和线程池没啥关系
dode
49 天前
try {
while (true) {

}
} catch (Exception e) {
}
saveErrorInfo();
dode
49 天前
设置好线程名称,不写了的时候这个线程还在不在,这个线程在执行什么函数调用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1075722

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX