我正在使用Java而我正在尝试下面的代码
public RunnableThread(String threadName){
thread = new Thread(this,threadName);
System.out.println(thread.getName());
thread.start();
boolean status=thread.isAlive();
}
但是当我检查线程的状态时,它返回我的错误。
我没有得到可能是什么问题。
提前感谢您的建议。
实际上我的run()方法有很多代码要执行。
我的main()方法在下面的部分代码中有一部分 JumboScrapeThread jumbThread = new JumbocrapeThread(“jubmThread”); 线程刮刀=新线程(jumbThread,“刮刀”); scraper.start();
正如我们所知,当我们调用thread.start()时,它在内部调用run()方法。 但是我在启动线程时遇到了问题,所以我的run()方法没有被调用。
我正在使用与sellinium的线程,所以有可能因为它而遇到问题吗?
答案 0 :(得分:2)
可能是一个经典的竞争条件:只调用start()
开始创建并最终运行新线程的过程,并且在该进程到达之前调用isAlive()
线程被正式视为“已启动”的阶段(或者,可能在其完成运行之后)。
答案 1 :(得分:1)
一旦run()
方法结束,线程就会结束,因此在调用isAlive()
方法时线程的状态可能会为'false',尽管JVM不保证这(所谓的竞争条件,无论它是返回真还是假)。你应该在run
方法中加入一些东西。
答案 2 :(得分:1)
这是因为Thread需要Runnable或Thread作为输入,我不确定RunnableThread的类型是否已覆盖run()方法。
如果它为空,则线程将完成执行,在这种情况下,alive返回false。
答案 3 :(得分:0)
可能是因为在你致电isAlive()
之前线程已经开始并完成了。除非您进行显式同步,否则JVM不保证执行线程的顺序。
答案 4 :(得分:0)
您可以使用同步来等待线程完全启动。
<强>代码强>
public class Main {
static class RunnableThread implements Runnable {
private Thread thread;
private Object waitForStart = new Object();
public RunnableThread(String threadName) {
thread = new Thread(this, threadName);
System.out.println(thread.getName());
synchronized (waitForStart) {
thread.start();
try {
waitForStart.wait();
} catch (InterruptedException ex) {
}
boolean status = thread.isAlive();
System.out.println(status);
}
}
public void run() {
synchronized (waitForStart) {
waitForStart.notifyAll();
}
// Do a bunch of stuff
try {
Thread.sleep(4000);
} catch (InterruptedException ex) {
}
System.out.println("Thread finished.");
}
}
public static void main(String[] args) {
RunnableThread thread = new RunnableThread("MyThread");
}
}