Java多線程編程初步
|
什么是多線程編程
多線程編程技術是Java語言的重要特點。多線程編程的含義是將程序任務分成幾個并行的子任務。特別是在網絡編程中,你會發現很多功能是可以并發執行的。比如網絡傳輸速度較慢、用戶輸入速度較慢,你可以用兩個獨立的線程去完成這兩個功能,而不影響正常的顯示或其它功能。
多線程是與單線程比較而言的,普通的Windows采用單線程程序結構,其工作原理是:主程序有一個消息循環,不斷從消息隊列中讀入消息來決定下一步所要干的事情,一般是針對一個函數,只有等這個函數執行完之后,主程序才能接收另外的消息來執行。比如子函數功能是在讀一個網絡數據,或讀一個文件,只有等讀完這個數據或文件才能接收下一個消息。在執行這個子函數過程中你什么也不能干。但往往讀網絡數據和等待用戶輸入有很多時間處于等待狀態,多線程利用這個特點將任務分成多個并發任務后,就可以解決這個問題。
Java中的線程類
要學會Java中的多線程編程,就得知道如何實現支持多線程的類。Java中實現多線程的類有兩種方法:
1.擴展java.lang.Thread類,用它覆蓋Thread類的run方法。
2.生成實現java.lang.Runnable接口的類并將其它的實例與java.lang.Thread實例相關聯。
Thread類是負責向其它類提供線程支持的最主要的類,要使用一個類具有線程功能,在Java中只要簡單地從Thread類派生一個子類就可以了擴展Thread類,如printThread.java。
下面我們將通過實例來介紹如何使用這兩種方法編寫自己的多線程應用程序。
創建java.lang.Thread類的子類
Thread類最重要的方法是run方法。run方法是新線程執行的方法,因此生成java.lang.Thread的子類時,必須有相應的run方法。
| //PrintThread.java public class PrintThread extends Thread//繼承Tread類 private int count=0 //定義一個count變量用于統計打印的次數并共享變量 public static void mainString args//main方法開始 PrintThread p=new PrintThread//創建一個線程實例 p.start//執行線程 for{;;}//主線程main方法執行一個循環,for執行一個死循環 count++ System.out.printcount+″:Main″//主線程中打印count +“main”變量的值,并換行 public void run//線程類必須有的run()方法 for{;;} count++ System.out.printcount+″:Thread″ |
上面這段程序便是繼承java.lang.Tread并覆蓋run的方法。用Java 虛擬機啟動程序時,這個程序會先生成一個線程并調用程序主類的main方法。這個程序中的main方法生成新線程,連接打印“Thread”。在啟動線程之后,主線程繼續打印“Main”。
編譯并執行這個程序,然后立即按“Ctrl+C”鍵中斷程序,你會看到上面所述的兩個線程不斷打印出:XXX:main…..XXX:Thread…. XXX代表的是數字,也就是上面count的值。在筆者的機器上,不同時刻這兩個線程打印的次數不一樣,先打印20個main(也就是先執行20次主線程)再打印出50次Thread,然后再打印main……
提示:為了便于查看該程序的執行結果,你可以將執行結果導入一個文本文件,然后打開這個文件查看各線程執行的情況。如運行:
javac PrintThread.java
Java PrintThread>1.txt
第一個命令javac PrintThread.java是編譯java程序,第二個是執行該程序并將結果導入1.txt文件。這樣,打開這個文件,你就可以看見詳細的結果了(注意:程序的執行時間不能太長,不然生成的1.txt文件會很龐大)。當然你可以直接執行命令:java PrintThread。