線程與多線程(二)——java實現多線程

二、 在Java中實現多線程

       每個程序至少自動擁有一個線程,稱爲主線程。當程序加載到內存時,啓動主線程。Java 程序中的public static void main( )方法是主線程的人口,運行Java程序時,會先執行這個方法。
        開發中, 用戶編寫的線程般都是指除了主線程之外的其他線程。
        使用一個線程的過程,可以分爲4個步驟:
        (1)定義一個線程,同時指明這個線程所要執行的代碼,即期望完成的功能。
        (2)創建線程對象。
        (3)啓動線程。
        (4)終止線程。
        定義一個線程類通常有兩種方法,分別是繼承java.lang.Thraed類和實現ava.lang.Runnable接口。

2.1使用Thread類創建線程

       Java提供了java.lang. Thread類支持名線程編程,該類提供了大量的方法來控制和操作線程,如表2-1所示。這些方法可以先初步瞭解,後面使用到時再深人學習。

                                                                    表2-1 Thread類常用方法

                           方法                                                                   說明
void run( ) 執行任務操作的方法
void start( ) 使該線程開始執行
void sleep(long millis) 在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)
String getName( ) 返回該線程的名稱
int getPriority() 返回線程的優先級
void setPriority(int newPriority) 更改線程的優先級
Thread.State getState() 返回該線程的狀態
boolcean isAlive( ) 測試線程是否處於活動狀態
void join( ) 等待該線程終止
void interrupt( ) 中斷線程
void yield() 暫停當前正在執行的線程對象,並執行其他線程

       創建線樣時繼承Thread 類並重寫Thread類的run( )方法。Thread 類的run( )方法是線程要執行操作任務的方法,所以線程要執行的操作代碼都需要寫在run( )方法中,並通過調用start( )方法來啓動線程。

示例1

       使用繼承Thread類的方式創建線程,在線程中輸出1~100的整數。
       實現步驟:
       (1)定義MyThread類繼承Thread類,重寫run( )方法, 在run( )方法中實現數據輸出.
       (2)創建線程對象。
       (3)調用start( )方法啓動線程。
       關鍵代碼:  

//通過繼承Thread類來創建線程
public class MyThread extends Thread{
        private int count=0;
        //重寫run()方法
        public void run(){
            while (count<100) {
                count++;
                system.out.println ("count的值是: "+count);
            }
        }
} 
//啓動線程
publlc class Test{
    public static vold main(String args){
        //實例化線程對象
        MyThread mt = new MyThread();        
        //啓動線程
        mt.start();
    }
}

由示例1可以看出,創建線程對象時將不會開啓線程,必須到用線是對象的start( )方法才能使線程開始執行。

2.2使用Runnable接口創建線程

       使用繼承Thread類的方式創建線程簡單明瞭,符合大家的習慣,但它也有一個缺點, 如果定義的類已經繼承其他類則無法再繼承Thread類。使用Runnable接口創建線程的方式可以解決上述問題。Runnable接口中聲明瞭一個run( )方法,即public void run()。一個類可以通過實現 Runmable接口並實現其run( )方法完成線程的所有活動,已實現的run( )方法稱爲該對象的線程體。任何實現Runnable接口的對象都可以作爲一個線程的目標對象。

示例2

       使用實現Runnable接口的方式創建線程,在線程中輸出1~100的整數。
       實現步驟:
       (1)定義MyThread類實現java.lang.Runnable接口,並實現Runnable接口的run( )方法,在run( )方法中實現輸出數據。
       (2)創建線程對象。
       (3)調用star( )方法啓動線程,
       關鍵代碼:
 

//通過實現Runnable樓口創建線程
publie class MyThread implements Runnable{
    private int count = 0;
    //實現run()方法
    public void run(){
        while (count<100){
            count++;
            System .out .printin("count的值是: "+count);
        }
    }
} 
//啓動線程
public class Test{
    publie statie vold main(string args){
        //創建線程對象,將實現Runnable的線程類對象作爲參數
        Thread thread = new Thread(new MyThread());
        //啓動線程
        thread.start();
    }
}

       示例2中,通過Thread tread=new Thread(new MyThread( ))創建線程對象。
       兩種創建線程的方式有各白的特點和應用領域:直接繼承Thread類的方式編寫簡單,可以直接操作線程,適用於單重繼承的情況;實現Runnable接口的方式,當一個線程繼承了另一個類時,就只能用實現Runnable 接口的方法來創建線程,而且這種方式還可以使名個線程之間使用同一個Runnable對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章