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

我正在尝试一个java线程的isAlive()方法的例子。 但是我发现即使线程已经启动, 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(); } } } 

如果我的记忆很好,java在线程切换之间有相当长的时间段,因此isAlive可能因为线程尚未存活而失败。 尝试在thread.start()和thread.isAlive()之间添加一些等待时间

在调用start()和调用isAlive()之间,线程很可能已经启动,执行和完成。

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

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

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

因此在检查isAlive() start()之后调用start()永远不会起作用。

我还没有在java中做过任何multithreading,但它看起来像你的线程可能会在isAlive()检查之前运行并退出。 毕竟,看起来你的线程只是打印出来然后死掉。

我没有看到您发布的代码的重点。 Thread.start()启动线程:您不需要启动它两次。 我没有看到你的代码如何能够真实地处理它有一个Thread并且不知道它是否已经启动的情况; 无论如何,有很多方法来编码,所以它不可能发生。