java - 为什么无法唤醒该线程

标签 java multithreading wakeup

我想测试Thread.sleep()方法,我发现了一个有趣的事情.. 当我调用 main() 方法时,控制台将打印“UserA sleep...”和“UserA wakeing...”,这意味着程序被唤醒,但是当我使用 junit 方法运行与 main() 相同的代码时)方法,它不会打印“UserA waking...”...我将不胜感激任何人都可以解释它。

package com.lmh.threadlocal;

import org.junit.Test;

public class ThreadTest {

    public static void main(String [] args) {
        new Thread(new UserA()).start();
    }
    @Test
    public void testWakeup(){
        new Thread(new UserA()).start();
    }

}

class UserA implements Runnable{
    @Override
    public void run() {
        try {
            System.out.println("UserA sleeping...");
            Thread.sleep(1000);
            System.out.println("UserA waking...");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

最佳答案

我的猜测是,JUnit 在 sleep 完成之前拆除测试,因为测试执行线程在 sleep 完成之前退出测试方法。尝试一下

@Test
public void testWakeup() throws Exception {
    Thread t = new Thread(new UserA());
    t.start();
    t.join();
}

关于java - 为什么无法唤醒该线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414327/

相关文章:

android - 如何启用触摸唤醒作为 Android 源代码构建的一部分?

java - indexOf ("@") Java 中的方法

java - (Java) 线程不会执行

c# - Silverlight和等待失败

java - 简单线程串联运行? (第二个线程在第一个线程停止之前不会运行)

c# - 允许唤醒定时器 Windows 7/Vista

java - Spring Boot 中自定义 LdapUserDetailsS​​ervice 始终无法匹配密码

java - 配置 spring bean 接受 mule 消息或事件时出现问题

python - 我无法在 Windows 7 上安装 python 线程库

iOS - 连接一个/任何蓝牙设备时唤醒应用程序