NxxRngjnbgj
V2EX  ›  Java

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

  •  
  •   NxxRngjnbgj · Sep 25, 2024 · 3085 views
    This topic created in 626 days ago, the information mentioned may be changed or developed.

    最近开始接手 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 replies    2024-09-26 11:37:44 +08:00
    Rickkkkkkk
        1
    Rickkkkkkk  
       Sep 25, 2024
    啥叫假死?

    感觉你在提 AB 问题

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

    你这问题和线程池没啥关系
    dode
        6
    dode  
       Sep 26, 2024
    try {
    while (true) {

    }
    } catch (Exception e) {
    }
    saveErrorInfo();
    dode
        7
    dode  
       Sep 26, 2024
    设置好线程名称,不写了的时候这个线程还在不在,这个线程在执行什么函数调用
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2755 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 11:55 · PVG 19:55 · LAX 04:55 · JFK 07:55
    ♥ Do have faith in what you're doing.