【问题标题】:Java, main code stops when the thread is startedJava,线程启动时主代码停止
【发布时间】:2012-05-07 15:03:14
【问题描述】:

当我在我的程序中启动某个线程时,其他一切都会停止。

这是我的线程代码...

static Thread b1 = new Thread(new Builders());
b1.run();
System.out.println("done");

这是Builders类。

public class Builders implements Runnable {

    static boolean busy=false;
    Random r = new Random();

    public void run() {
        try{
            busy=true;
            System.out.println("ready");
            Thread.sleep(9999);
            busy=false;
            System.out.println("done");
        }
        catch(Exception e){
        }
    }
}

当我运行程序时,线程启动并且程序等待线程结束。我认为线程的要点是代码可以同时运行。有人可以帮我理解我做错了什么。

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    这是因为线程以start() 启动,而不是run(),它只是在当前线程上调用run 方法。所以应该是:

    static Thread b1 = new Thread(new Builders());
    b1.start();
    System.out.println("done");
    

    【讨论】:

    • @backman:不要忘记接受可以解决您问题的答案。这是使用 SO 的重要组成部分。
    【解决方案2】:

    这是因为您没有启动线程 - 相反,您正在通过调用 run() 同步执行线程的代码 ;你需要打电话给start()

    更好的是,您应该使用executors

    【讨论】:

      【解决方案3】:

      您需要调用start() 方法。 Thread 的内部代码将启动一个新的操作系统线程,该线程调用您的run() 方法。通过自己调用run(),您将跳过线程分配代码,而只是在您当前的线程中运行它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多