V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NxxRngjnbgj
V2EX  ›  Java

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

  •  
  •   NxxRngjnbgj · 55 天前 · 1064 次点击
    这是一个创建于 55 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近开始接手 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 去管理线程会不会有效,大家可以说说自己的看法

    7 条回复    2024-09-26 11:37:44 +08:00
    Rickkkkkkk
        1
    Rickkkkkkk  
       55 天前
    啥叫假死?

    感觉你在提 AB 问题

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

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

    }
    } catch (Exception e) {
    }
    saveErrorInfo();
    dode
        7
    dode  
       54 天前
    设置好线程名称,不写了的时候这个线程还在不在,这个线程在执行什么函数调用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1203 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 23:21 · PVG 07:21 · LAX 15:21 · JFK 18:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.