C語言中文網 目錄

Java線程的優先級和執行順序

< 上一頁Java暫停線程 Java網絡編程下一頁 >

在學習運算符時,讀者知道各個運算符之間有優先級,了解運算符的優先級對程序幵發有很好的作用。線程也是如此,每個線程都具有優先級,Java 虛擬機根據線程的優先級決定線程的執行順序,這樣使多線程合理共享 CPU 資源而不會產生沖突。

優先級概述

在 Java 語言中,線程的優先級范圍是 1~10,值必須在 1~10,否則會出現異常;優先級的默認值為 5。優先級較高的線程會被優先執行,當執行完畢,才會輪到優先級較低的線程執行。如果優先級相同,那么就采用輪流執行的方式。

可以使用 Thread 類中的 setPriority() 方法來設置線程的優先級。語法如下:
public final void setPriority(int newPriority);

如果要獲取當前線程的優先級,可以直接調用 getPriority() 方法。語法如下:
public final int getPriority();

使用優先級

簡單了解過優先級之后,下面通過一個簡單的例子來演示如何使用優先級。

例 1

分別使用 Thread 類和 Runnable 接口創建線程,并為它們指定優先級。

(1) 創建繼承自 Thread 類的 FirstThreadInput 類,重寫該類的 run() 方法。代碼如下:
package ch14;
public class FirstThreadInput extends Thread
{
    public void run()
    {
        System.out.println("調用FirstThreadInput類的run()重寫方法");    //輸出字符串
        for(int i=0;i<5;i++)
        {
            System.out.println("FirstThreadInput線程中i="+i);    //輸出信息
            try
            {
                Thread.sleep((int) Math.random()*100);    //線程休眠
            }
            catch(Exception e){}
        }
    }
}

(2) 創建實現 Runnable 接口的 SecondThreadInput 類,實現 run() 方法。代碼如下:
package ch14;
public class SecondThreadInput implements Runnable
{
    public void run()
    {
        System.out.println("調用SecondThreadInput類的run()重寫方法");    //輸出字符串
        for(int i=0;i<5;i++)
        {
            System.out.println("SecondThreadInput線程中i="+i);    //輸出信息
            try
            {
                Thread.sleep((int) Math.random()*100);    //線程休眠
            }
            catch(Exception e){}
        }
    }
}

(3) 創建 TestThreadInput 測試類,分別使用 Thread 類的子類和 Runnable 接口的對象創建線程,然后調用 setPriority() 方法將這兩個線程的優先級設置為 4,最后啟動線程。代碼如下:
package ch14;
public class TestThreadInput
{
    public static void main(String[] args)
    {
        FirstThreadInput fti=new FirstThreadInput();
        Thread sti=new Thread(new SecondThreadInput());
        fti.setPriority(4);
        sti.setPriority(4);
        fti.start();
        sti.start();
    }
}

(4) 運行上述代碼,運行結果如下所示。
調用FirstThreadInput類的run()重寫方法
調用SecondThreadInput類的run()重寫方法
FirstThreadInput線程中i=0
SecondThreadInput線程中i=0
FirstThreadInput線程中i=1
FirstThreadInput線程中i=2
SecondThreadInput線程中i=1
FirstThreadInput線程中i=3
SecondThreadInput線程中i=2
FirstThreadInput線程中i=4
SecondThreadInput線程中i=3
SecondThreadInput線程中i=4

由于該例子將兩個線程的優先級都設置為 4,因此它們交互占用 CPU ,宏觀上處于并行運行狀態。

重新更改 ThreadInput 類的代碼、設置優先級。代碼如下:
fti.setPriority(1);
sti.setPriority(10);

重新運行上述代碼,如下所示。
調用FirstThreadInput類的run()重寫方法
調用SecondThreadInput類的run()重寫方法
FirstThreadInput線程中i=0
SecondThreadInput線程中i=0
SecondThreadInput線程中i=1
SecondThreadInput線程中i=2
SecondThreadInput線程中i=3
SecondThreadInput線程中i=4
FirstThreadInput線程中i=1
FirstThreadInput線程中i=2
FirstThreadInput線程中i=3
FirstThreadInput線程中i=4
< 上一頁Java暫停線程 Java網絡編程下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo