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 我不明白可能是什么问题 提

我正在使用Java,我正在尝试下面的一段代码

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");
    }
}