Java 启动线程时出现问题
我正在使用Java,我正在尝试下面的一段代码Java 启动线程时出现问题,java,multithreading,Java,Multithreading,我正在使用Java,我正在尝试下面的一段代码 public RunnableThread(String threadName){ thread = new Thread(this,threadName); System.out.println(thread.getName()); thread.start(); boolean status=thread.isAlive(); } 但是当我检查线程的状态时,它会返回false 我不明白可能是什么问题 提
public RunnableThread(String threadName){
thread = new Thread(this,threadName);
System.out.println(thread.getName());
thread.start();
boolean status=thread.isAlive();
}
但是当我检查线程的状态时,它会返回false
我不明白可能是什么问题
提前谢谢你的建议
实际上,我的run方法有很多代码要执行
我的主要方法下面有一段代码作为它的一部分
jumbocrapethread jumbThread=新的jumbocrapethread jubmthread;
螺纹刮刀=新螺纹,刮刀;
1.启动
我们知道,当我们调用thread.start时,它会在内部调用run方法。
但是我在启动线程时遇到了问题,所以我的run方法没有被调用
我正在使用sellinium的线程,因此是否有可能因为它而出现问题?可能是因为在调用isAlive之前线程已经启动并完成。JVM不保证线程的执行顺序,除非您进行显式同步。可能是因为在调用isAlive之前线程已经启动并完成了。JVM不保证线程的执行顺序,除非您进行显式同步。一旦run方法结束,线程就会结束,因此在调用isAlive方法时,线程的状态可能为“false”,尽管JVM对此不作任何保证,但它返回true还是false,这就是所谓的竞争条件。您应该在run方法中添加一些内容。run方法一结束,线程就结束了,因此在调用isAlive方法时,线程的状态可能会为“false”,尽管JVM不保证这是一个所谓的争用条件,即返回true还是false。您应该在run方法中添加一些内容。这是因为线程需要一个Runnable或一个线程作为输入,我不确定您的RunnableThread的类型是什么,以及您是否重写了run方法
如果为空,线程将完成执行,在这种情况下,活动返回false。这是因为线程需要一个可运行线程或一个线程作为输入,我不确定RunnableThread的类型是什么,以及是否重写了run方法
如果为空,则线程将已完成执行,在这种情况下,活动线程返回false。可能是一个典型的竞争条件:调用start只会开始创建并最终运行新线程的过程,并且在该过程达到正式认为线程已启动的阶段之前调用isAlive,可能,在它完成运行之后。可能是一个典型的竞争条件:调用start只会开始创建并最终运行新线程的过程,并且在该过程达到正式认为线程已启动的阶段之前调用isAlive,或者,可能,完成运行后。您可以使用同步来等待线程完全启动 代码
您可以使用同步来等待线程完全启动 代码
run方法做什么?在thread.run中做什么。可能在您检索isAlive值之前它就结束了?现在我得到了线程的状态为“活动”,但我们知道start在内部调用run方法,但在我的情况下,run方法没有被调用。您能建议我这样做吗?run方法做什么?您在thread.run中做什么。可能在检索isAlive值之前它就结束了?现在我得到了线程的状态为alive,但是我们知道start在内部调用run方法,但是在我的情况下,运行方法没有被调用。你能建议我这样做吗?你好,安德鲁。我已经在我的程序中尝试了你的代码。现在我的线程状态是活动的,但是现在运行方法仍然没有被调用。@Saggy我非常乐意提供帮助。您介意用生成线程的代码和run方法的前几行更新您的问题吗。我感觉你的跑步方法正在同步锁定。如果您想保持原始问题的纯粹性,您可以使用pastebin.com并在评论中回复。您好,安德鲁。我已经在我的程序中尝试了您的代码。现在我的线程状态是活动的,但现在仍然没有调用run方法。@Saggy我非常乐意提供帮助。您介意用生成线程的代码和run方法的前几行更新您的问题吗。我感觉你的跑步方法正在同步锁定。如果你想保持原始问题的纯粹性,你可以使用pastebin.com并在评论中回复。你好,克里斯,实际上,我的run有很多东西要执行。但问题是,我正在获取线程的状态为“活动”,但我的run方法没有被执行。我在run方法中设置了断点,但在调试时,它也不会运行。你好,chris,实际上我的run 有很多东西要执行。但问题是,我正在获取线程的状态为“活动”,但我的run方法没有被执行。我在run方法中设置了断点,但在调试时,它也不会运行。
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");
}
}