




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java線程(上)線程(上)ID:SCSJ002-J2SEJava線程(上)線程(上)v線程概述線程概述vJava線程模型線程模型v創(chuàng)建線程創(chuàng)建線程v后臺線程(守護線程)后臺線程(守護線程)v線程的線程的join()方法方法2011-05-032線程概述線程概述v多進程:在操作系統(tǒng)中能(同時)運行多個任務多進程:在操作系統(tǒng)中能(同時)運行多個任務(程序程序)v多線程:在同一應用程序中有多個順序流(同時)多線程:在同一應用程序中有多個順序流(同時)執(zhí)行執(zhí)行2011-05-033Java線程模型線程模型v 虛擬的虛擬的CPU,由,由java.lang.Thread類封裝和虛擬類封裝和虛擬CPU來實
2、現(xiàn)。來實現(xiàn)。v CPU所執(zhí)行的代碼,傳遞給所執(zhí)行的代碼,傳遞給Thread類對象。類對象。v CPU所處理的數(shù)據(jù),傳遞給所處理的數(shù)據(jù),傳遞給Thread類對象。類對象。代 碼數(shù) 據(jù)虛擬CPUJava線程模型2011-05-034創(chuàng)建線程創(chuàng)建線程v 通過通過java.lang.Thread來創(chuàng)建一個線程來創(chuàng)建一個線程v Thread的構造器:的構造器: Thread() Thread(Runnable target) Thread(Runnable target, String name) Thread(String name) Thread(ThreadGroup group, Runnabl
3、e target) Thread(ThreadGroup group, Runnable target, String name) Thread(ThreadGroup group, String name) 2011-05-035啟動線程啟動線程v 每個線程都是通過某個特定每個線程都是通過某個特定ThreadThread對象所對應的方法對象所對應的方法run( )run( )來完成其操作的,來完成其操作的,方法方法run( )run( )稱為線程體。稱為線程體。v 使用使用start()start()方法方法,線程進入,線程進入RunnableRunnable(可運行)狀態(tài),(可運行)狀態(tài),
4、它將向線程調度器注冊這個線程。它將向線程調度器注冊這個線程。v 調用調用start()start()方法方法并不一定馬上會執(zhí)行這個線程并不一定馬上會執(zhí)行這個線程,正如,正如上面所說,它只是進入上面所說,它只是進入RunnableRunnable 而不是而不是RunningRunning。v 注意,不要直接在程序中調用線程的注意,不要直接在程序中調用線程的run()run()方法。方法。2011-05-036創(chuàng)建并啟動線程例子創(chuàng)建并啟動線程例子public classpublic class TestThreadTestThread extendsextends ThreadThread pub
5、lic voidpublic void run() run()forfor( (intint i = 0; i 100; i+) i = 0; i 100; i+) SystemSystem.out.println(.out.println(Count:Count:+i);+i); public static voidpublic static void main( main(StringString args) args)TestThreadTestThread tt = tt = new new TestThreadTestThread();();/注意,不要直接調用注意,不要直接調用ru
6、nrun方法方法tt.start();tt.start(); 2011-05-037創(chuàng)建線程的另一種方式創(chuàng)建線程的另一種方式v通過實現(xiàn)通過實現(xiàn)Runnable接口并實現(xiàn)接口中定義的唯接口并實現(xiàn)接口中定義的唯一方法一方法run(),可以創(chuàng)建一個線程,可以創(chuàng)建一個線程public class TestThreadTestThread implements Runnable public void run() for(int i = 0; i 100; i+) SystemSystem.out.println(Count:+i); public static void main(StringStri
7、ng args) TestThreadTestThread tt = new TestThreadTestThread(); ThreadThread t = new ThreadThread(tt); t.start();2011-05-038兩種線程創(chuàng)建方式的比較兩種線程創(chuàng)建方式的比較v 使用使用Runnable接口接口 可以將CPU,代碼和數(shù)據(jù)分開,形成清晰的模型; 還可以從其他類繼承; 保持程序風格的一致性。v 直接繼承直接繼承Thread類類 不能再從其他類繼承; 編寫簡單,可以直接操縱線程,無需使用Thread.currentThread()。2011-05-039結束線程結束線程
8、v線程會以以下三種方式之一結束:線程會以以下三種方式之一結束: 線程到達其 run() 方法的末尾; 線程拋出一個未捕獲到的 Exception 或 Error;/下面線程何時結束?public class TestThreadTestThread implements Runnable public void run() for(int i = 0; i 100; i+) SystemSystem.out.println(Count:+i); 2011-05-0310后臺線程后臺線程v有一種線程,它是在后臺運行的,它的任務是為有一種線程,它是在后臺運行的,它的任務是為其他的線程提供服務,這種
9、線程被稱為其他的線程提供服務,這種線程被稱為后臺線后臺線程(程(Daemon Thread),又稱為,又稱為守護線程守護線程public static void main(StringString args) TestThreadTestThread tt = new TestThreadTestThread(); ThreadThread t = new ThreadThread(tt); /設置為后臺線程,主線程結束,后臺線程自動結束。設置為后臺線程,主線程結束,后臺線程自動結束。 t.setDaemon(t.setDaemon(truetrue); ); t.start();2011-0
10、5-0311線程的線程的join方法方法vThread API 包含了等待另一個線程完成的方包含了等待另一個線程完成的方法:法:join() 方法。當調用方法。當調用 Thread.join() 時,時,調用線程將阻塞,直到被調用線程將阻塞,直到被join方法加入的目標線方法加入的目標線程完成為止。程完成為止。 vThread.join() 通常由使用線程的程序調用,通常由使用線程的程序調用,以將大問題劃分成許多小問題,每個小問題分配以將大問題劃分成許多小問題,每個小問題分配一個線程。當所有的小問題都得到處理后,再調一個線程。當所有的小問題都得到處理后,再調用主線程來進一步操作。用主線程來進一
11、步操作。2011-05-0312join方法例子方法例子public classpublic class Key2FileKey2File extends extends ThreadThread StringString path; path; publicpublic Key2FileKey2File( (StringString path) path) thisthis.path = path.path = path public voidpublic void run() run() forfor( (intint i = 0; i 100; i+) i = 0; i 100; i+)
12、 ThreadThread.sleep(1000); .sleep(1000); /休息休息10001000毫秒毫秒 StringString name = name = StringString.format(.format(“%s/%d.txt”“%s/%d.txt”, , path, i); path, i); OutputStream OutputStream out = out = newnew FileOutputStreamFileOutputStream(name);(name); out.write( out.write(“hello”“hello”.getBytes();.
13、getBytes(); out.close(); out.close(); publicpublic staticstatic voidvoid main(String args) trytry Key2File k = newnew Key2File10; for for(intint i = 1; i = 10; i+) ki-1 = newnew Key2File(d:tempd“ + i + ); ki-1.start(); for for(intint i = 1; i = 10; i+) ki-1.join();ki-1.join(); catchcatch (Interrupte
14、dException e) e.printStackTrace(); System.out.println(文件創(chuàng)建完成。);2011-05-0313線程的簡單控制線程的簡單控制v 測試線程是否正處于測試線程是否正處于Runnable狀態(tài)狀態(tài) isAlive()v 中斷線程中斷線程 Thread.sleep() Thread.yield()v 設置線程的優(yōu)先級設置線程的優(yōu)先級 getPriority() setPriority()2011-05-0314線程狀態(tài)線程狀態(tài)RunnableRunningBlockedNewstart()run() 運行完畢線程調度阻塞事件解除阻塞Dead2011-
15、05-0315與線程控制有關的方法與線程控制有關的方法start() 新建的線程進入Runnable狀態(tài)run() 線程進入Running 狀態(tài) wait()線程進入等待狀態(tài),等待被notify,這是一個對象方法,而不是線程方法notify()/notifyAll()喚醒其他的線程,這是一個對象方法,而不是線程方法 yield()線程放棄執(zhí)行,使其他優(yōu)先級不低于此線程的線程有機會運行,它是一個靜態(tài)方法getPriority()/setPriority()獲得/設置線程優(yōu)先級sleep()線程睡眠指定的一段時間join()調用這個方法的主線程,會等待加入的子線程完成2011-05-0316作業(yè):作業(yè):v主線程接受鍵盤輸入主線程接受鍵盤輸入,子線程每子線程每1秒鐘一次,判斷秒鐘一次,判斷指定的某個目錄下的某個文件是否被修改,如果指定的某個目錄下的某個文件是否被修改,如果被修改,就在被修改,就在Console上打印出上打印出“File changed”v將一個將一個500M的文件,用的文件,用4個線程搬運到另外一個線程搬運到另外一個文件目錄里去。個文件目錄里去。v查看一個目錄,根據(jù)文件的數(shù)目,啟動相應的線查看一個目錄,根據(jù)文件的數(shù)目,啟動相應的線程數(shù),將文件拷貝到另外一個目錄里面去。程數(shù),將文件拷貝到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 邊緣計算設備的多模態(tài)數(shù)據(jù)融合威脅檢測與防御-洞察及研究
- 華為公關經費管理辦法
- 農業(yè)項目考核管理辦法
- 辣椒種植新技術推廣方案指南
- 北京擺攤行為管理辦法
- 公共區(qū)域職場管理辦法
- 酒店員工獎勵與處罰制度
- 江蘇技能競賽管理辦法
- 互聯(lián)網(wǎng)企業(yè)敏捷組織模式創(chuàng)新研究
- 農業(yè)項目投標管理辦法
- 2025年湖北省中考語文真題(解析版)
- 維修安全生產管理制度
- 《小學生心理健康教育》試題及答案
- 2024年全球及中國神經康復外骨骼機器人行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 某鎮(zhèn)“十五五”發(fā)展規(guī)劃編制思路
- 江蘇省連云港市2024-2025學年高二年級上冊期末調研考試物理試題(選修)解析版
- 免疫初中試題及答案
- 宏觀經濟學 試題及答案
- GB/T 23454-2025石材臺面板
- 科研單位科研誠信自查報告及整改措施
- 加工碎石合作協(xié)議書
評論
0/150
提交評論