java线程的isAlive()方法不能正常工作?

Ris*_*ise 5 java multithreading

我正在尝试isAlive()java线程方法的一个例子.但是我发现即使线程已经启动,该isAlive()方法也会返回false.有人可以告诉我,我做错了什么?这是代码片段.

package app;

public class ThreadAliveDemo {

    public static void main(String[] args) {

        Thread myThread;

        myThread = new Thread()
        {
            public void run()
            {
                            Thread.sleep(3000);
                System.out.println("My Thread.");
            }
        };

        myThread.setName("My Thread");
        myThread.start();

        if(!myThread.isAlive())
        {
            myThread.setName("My Thread");
            myThread.start();
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

ska*_*man 11

在您的通话start()和通话之间,线程很可能已经启动,执行和完成isAlive().

Java不保证这些事情发生的顺序.它可以立即执行生成的线程,或者可以选择将其推迟到稍后.

顺便说一下,你的代码试图在线程死后重新启动它.这是不允许的:

不止一次启动一个线程永远不合法.特别是,一旦完成执行,线程可能无法重新启动.

因此start(),检查后调用isAlive()永远不会起作用.


小智 4

如果我没记错的话,java在线程切换之间有相当长的周期,因此 isAlive 可能会失败,因为线程尚未处于活动状态。尝试在 thread.start() 和 thread.isAlive() 之间添加一些等待时间

  • 难道只有我一个人觉得这种行为很没用吗? (3认同)