簡體   English   中英

Java:多線程

[英]Java: multithreading

為什么類A的線程要等到類B的線程結束? 在此示例中,代碼打印System.out.println從不執行。 我該如何解決?

public class A implements Runnable {
    public A() {
        Thread t = new Thread(this);
        t.start();

    }
    public static void main(String[] args) {
        A tmp = new A();
    }
    public void run() {

        B tmp = new B();
        tmp.run();

        System.out.println("Hello");
    }
}
class B implements Runnable {
    public B() {
    }
    public void run() {
        while (true) {
        }
    }
}
tmp.run(); 

在主線程,而不是單獨的運行Thread ,因為你還沒有開始B中一個單獨的線程。

以上行應替換為

new Thread(tmp).start();

您已經正確啟動了線程A(通過使用start()方法),並且沒有為線程B復制相同的線程。

請參考有關以兩種方式啟動線程的oracle文檔鏈接:

  1. 提供一個Runnable對象: Runnable接口定義一個方法run,用於包含在線程中執行的代碼。
  2. 子類線程:線程類本身實現了Runnable,盡管其run方法不執行任何操作。 應用程序可以子類化Thread,提供自己的運行實現

另外,線程B無限循環運行,沒有退出條件。 如果不需要,請在run()方法中添加退出條件。

這段代碼:

B tmp = new B();
tmp.run();

System.out.println("Hello");

不啟動線程。 僅產生一個線程,它調用b.run() 因此,線程a只是掛在b.run()的無限循環中。 只需為可運行的`b'創建另一個線程,一切都會按預期工作:

public void run() {

    Thread t = new Thread(new B());
    t.start();

    System.out.println("Hello");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM