[英]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文檔鏈接:
Runnable
接口定義一個方法run,用於包含在線程中執行的代碼。 另外,線程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.