簡體   English   中英

Java多線程

[英]Multithreading in Java

這是我的代碼

public class ThreadLearn{
private static class Check implements Runnable{
    public void run(){

        System.out.printf("\nInCheck %s", Thread.currentThread().getName());
    }
}

public static void main(String[] args){

   Thread t;
   int i=0;
   while(i<2){
      t = new Thread(new GetData());
      t.start();
      System.out.printf("\n%s: ", t.getName());
      i++;
   }

}

}

輸出為:

InRun Thread-0
Thread-0:
Thread-1:
InRun Thread-1

我有兩個問題:

  1. 輸出不應該是

    InRun線程-0

    線程-0:

    InRun線程1

    線程1:

  2. 一旦完成t.start() ,它將等待run()執行然后創建第二個線程嗎? 如果我想執行以下操作怎么辦

    while(必填)

    新的Thread()。start();

在我的運行方法中,我可以擁有所有我希望線程並行完成的工作,這樣它就不會等待一個線程完成運行方法,然后創建第二個線程。

謝謝

輸出不應該是...

否。線程彼此獨立運行。 JVM和操作系統決定何時運行哪個線程。 通常,執行兩個線程的順序是不可預測的。 很有可能發生,當您再次運行該程序時,結果會有所不同。

一旦完成t.start() ,它將等待run()執行然后創建第二個線程嗎?

不,它不會等待。 新線程的run()方法可能立即啟動,也可能稍后啟動,具體取決於線程的調度方式。

當線程啟動時,它就啟動了。 因此,兩個System.out幾乎在同一時間執行,導致它們有時會更改順序

例:

            ---- thread-0 prints out  
Main thread |--- Prints out ----------- Prints out
                                      |Thread-1 started, prints out

如您所見,這些分支將與主代碼幾乎同時運行,從而導致它們之間波動,而實際上它們首先會打印出來

由於您未提供任何同步機制,因此無法確定要首先執行哪個線程的方法。 在不同的運行中,可能還有其他順序。

暫無
暫無

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

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