簡體   English   中英

Java-如何在線程之間分配處理時間?

[英]Java - How is processing time split between threads?

我是Java線程技術的新手。 我一直在閱讀一些在線教程,但是沒有找到很多有關如何在線程之間分配處理時間的材料。

我創建了一個Runnable類:

public class HelloThread implements Runnable {

    public void run() {

        int i = 0; 
        while(true) 
        { 
            System.out.println("New Thread" + i);
            i++; 
        }
    }
}

然后在以下位置啟動新線程:

public static void main (String[] args) { 

    // Start a new thread
    Thread helloThread = new Thread(new HelloThread());
    helloThread.start(); 

    int i = 0; 
    while(true) 
    { 
        System.out.println("hello from main thread" + i);   
        i++; 
    } 
}

輸出在helloThread和主線程中的消息之間交替。 這兩個線程之間的處理時間如何分配? 我使用了setPriority()方法,但是即使將helloThread的優先級設置為10,主線程仍然會占用一些處理時間。

謝謝!

您無法預測線程何時運行(如您所假設的)。 即使您的線程優先級為10,也無法保證線程將完全運行。 線程依賴於具體的JVM(有不同的JVM實現)以及底層操作系統甚至您的硬件(例如您擁有多少個內核)。

在您的示例中,您有兩個線程(主線程和HelloThread )。 兩者都在運行。 因此,兩個線程都運行並打印消息是完全可以的。 線程的目的是交替調度並並行運行。

這是因為它們具有相同的優先級。 您可以添加如下語句

System.out.println( Thread.currentThread().getPriority() );

根據您的示例,兩個線程的優先級均應為5

正如Thomas Uhrig解釋的那樣,即使具有更高的優先級,另一個線程仍將得到調度和執行。 這是不確定的。

暫無
暫無

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

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