




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1Java多線程2概述線程的創(chuàng)建兩種方式線程的同步synchronizedwait()/notifyAll()/notify()線程的生命周期3概述進(jìn)程(Process)程序(Program)的一次動(dòng)態(tài)執(zhí)行過程,占用特定的地址空間在某種程度上相互隔離的、獨(dú)立運(yùn)行的程序多任務(wù)(Multitasking)操作系統(tǒng)將CPU時(shí)間動(dòng)態(tài)地劃分給每個(gè)進(jìn)程,操作系統(tǒng)同時(shí)執(zhí)行多個(gè)進(jìn)程,每個(gè)進(jìn)程獨(dú)立運(yùn)行進(jìn)程的查看Windows系統(tǒng):Ctrl+Alt+DelUnix系統(tǒng):psortop4線程(Thread)線程是進(jìn)程中一個(gè)“單一的連續(xù)控制流程”一個(gè)進(jìn)程可擁有多個(gè)并行的線程一個(gè)進(jìn)程中的線程共享相同的內(nèi)存單元/內(nèi)存地址空間可以訪問相同的變量和對(duì)象,而且它們從同一堆中分配對(duì)象通信、數(shù)據(jù)交換、同步操作輕量級(jí)進(jìn)程(lightweightprocess)單線程程序多線程程序一個(gè)線程兩個(gè)線程6Java語言中的線程大多數(shù)現(xiàn)代的操作系統(tǒng)都支持線程Java是第一個(gè)在語言本身中顯性地包含線程的主流編程語言,它沒有把線程化看作是底層操作系統(tǒng)的工具每個(gè)Java程序都至少有一個(gè)線程—主線程當(dāng)一個(gè)Java程序啟動(dòng)時(shí),JVM會(huì)創(chuàng)建主線程,并在該線程中調(diào)用程序的main()方法JVM還創(chuàng)建了其它線程,如垃圾收集(gc)7Java實(shí)現(xiàn)多線程的方法java.lang.Thread類java.lang.Runnable接口多線程的用途Client/Server設(shè)計(jì)中的服務(wù)器端,如每個(gè)用戶請(qǐng)求建立一個(gè)線程圖形用戶界面(GUI)的設(shè)計(jì)中提高事件響應(yīng)的靈敏度從提高程序執(zhí)行效率的考慮利用多處理器系統(tǒng)執(zhí)行異步或后臺(tái)處理等8初探線程publicclassSimpleThreadextendsThread{publicSimpleThread(Stringstr){super(str);}publicvoidrun()
{
System.out.println(getName()+“線程開始!");for(inti=0;i<8;i++){System.out.println(i+""+getName());try{sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}
System.out.println(getName()+"線程運(yùn)行結(jié)束!");}}概述publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){
newSimpleThread(“A").start();
newSimpleThread(“B").start();}}9線程創(chuàng)建的兩種方式繼承java.lang.Thread類,重寫run()方法實(shí)現(xiàn)java.lang.Runnable接口Runnable接口的唯一方法publicvoidrun()線程的創(chuàng)建10線程的創(chuàng)建publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){
newSimpleThread1("Jamaica").start();
newSimpleThread1("Fiji").start();}}publicclassSimpleThread2
implementsRunnable{Stringname;publicSimpleThread2(Stringstr){name=str;}publicvoidrun(){for(inti=0;i<8;i++){System.out.println(i+""+name);Thread.sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}System.out.println("DONE!"+name);}}publicclassSimpleThread1
extendsThread{publicSimpleThread1(Stringstr){super(str);}publicvoidrun(){for(inti=0;i<8;i++){System.out.println(i+""+getName());try{
sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}System.out.println("DONE!"+getName());}}publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){SimpleThread2a=newSimpleThread2("Jack");
Threadthread1=newThread(a); thread1.start(); SimpleThread2b=newSimpleThread2(“Tom");Threadthread2=newThread(b);thread2.start();}}11共享資源的訪問多個(gè)線程對(duì)同一資源進(jìn)行操作(讀/寫)當(dāng)多個(gè)線程訪問同一數(shù)據(jù)項(xiàng)(如靜態(tài)字段、可全局訪問對(duì)象的實(shí)例字段或共享集合)時(shí),需要確保它們協(xié)調(diào)了對(duì)數(shù)據(jù)的訪問,這樣它們都可以看到數(shù)據(jù)的一致視圖,而且相互不會(huì)干擾另一方的更改synchronized關(guān)鍵詞wait()/notify()/notifyAll()方法線程的同步12線程的同步publicclassCubbyHole{
privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassProducerextendsThread{privateCubbyHolecubbyhole;publicProducer(CubbyHolec){cubbyhole=c;}publicvoidrun(){for(inti=0;i<10;i++){cubbyhole.put(i);System.out.println(“生產(chǎn)了:"+i);try{sleep((int)(Math.random()*100));}catch(InterruptedExceptione){}}}}publicclassConsumerextendsThread{privateCubbyHolecubbyhole;publicConsumer(CubbyHolec){cubbyhole=c;}publicvoidrun(){intvalue=0;for(inti=0;i<10;i++){value=cubbyhole.get();System.out.println(“消費(fèi)了:"+value);}}}publicclassProducerConsumerTest{publicstaticvoidmain(String[]args){CubbyHoleh=newCubbyHole();Producerp=newProducer(h);Consumerc=newConsumer(h);p.start();c.start();}}13給關(guān)鍵部分(CriticalSection)加鎖(lock)CubbyHole對(duì)象synchronized關(guān)鍵詞
thetwothreadsmustnotsimultaneouslyaccesstheCubbyHole.publicclassCubbyHole{privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassCubbyHole{privateintcontents;publicsynchronizedintget(){returncontents;}publicsynchronizedvoidput(intvalue){contents=value;}}14線程的協(xié)調(diào)thetwothreadsmustdosomesimplecoordination.Producer通過某種方式告訴Consumer在CubbyHole中有值,而Consumer必須通過某種方式表示出CubbyHole中的值已被取走CubbyHole對(duì)象(CriticalSection)java.lang.Object類的方法wait()、notify()、notifyAll()15線程的同步publicclassCubbyHole{privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassCubbyHole{privateintcontents;privatebooleanavailable=false;publicsynchronizedintget(){while(available==false){try{
wait();//打開鎖,等候Producer填值
}catch(InterruptedExceptione){}}available=false;notifyAll();returncontents;}publicsynchronizedvoidput(intvalue){while(available==true){try{
wait();//打開鎖,等候Consumer取值
}catch(InterruptedExceptione){}}contents=value;available=true;
notifyAll();}}java.lang.Objectpublicfinalvoidwait()throwsInterruptedExceptionpublicfinalvoidwait(longtimeout)throwsInterruptedExceptionpublicfinalvoidnotifyAll()//喚醒所有等待的線程publicfinalvoidnotify()//隨機(jī)喚醒一個(gè)等待的線程16線程的同步publicclassCubbyHole{privateintcontents;privatebooleanavailable=false;publicsynchronizedintget(){while(available==false){try{
wait();//打開鎖,等候Producer填值
}catch(InterruptedExceptione){}}available=false;notifyAll();returncontents;}publicsynchronizedvoidput(intvalue){while(available==true){try{
wait();//打開鎖,等候Consumer取值
}catch(InterruptedExceptione){}}contents=value;available=true;
notifyAll();}}線程consumerget()判斷當(dāng)前是否存有值有沒有設(shè)置為空喚醒producer取值釋放鎖定等待新值線程producerput()判斷當(dāng)前是否存有值有沒有釋放鎖定等待取值放值設(shè)置為有喚醒consumer17線程啟動(dòng)newSimpleThread1("Jamaica").start();classSimpleThread1extendsThread{……}SimpleThread2a=newSimpleThread2("Jack");Threadthread=newThread
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 母嬰合同協(xié)議書怎么寫
- 創(chuàng)業(yè)計(jì)劃書老人手表設(shè)計(jì)
- 塑料產(chǎn)品加工合同協(xié)議書
- 素食餐廳計(jì)劃書
- 服裝分紅合同協(xié)議書范本
- 深圳工作報(bào)告2022
- 情侶酒店創(chuàng)業(yè)計(jì)劃書范文 創(chuàng)業(yè)計(jì)劃書
- 中國氟扁桃酸項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 游戲代打公司策劃書3
- 5000噸肉類融資投資立項(xiàng)項(xiàng)目可行性研究報(bào)告(非常詳細(xì))
- 2025年6.5世界環(huán)境日知識(shí)答題試題及答案
- 眼睛修復(fù)協(xié)議書
- 2024 - 2025學(xué)年一年級(jí)下冊(cè)道德與法治期末考試卷附答案(三套)
- 欠債用車抵債協(xié)議書
- 設(shè)計(jì)合作月結(jié)協(xié)議書
- 溴素行業(yè)分析報(bào)告
- 《基于PLC的包裝機(jī)控制系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)》10000字(論文)
- 地鐵安檢機(jī)考試題及答案
- 泰康之家管理體系
- 2025年浙江省金華市義烏市六年級(jí)下學(xué)期5月模擬預(yù)測數(shù)學(xué)試題含解析
- 高壓均質(zhì)及熱處理改性鷹嘴豆蛋白對(duì)減磷豬肉糜凝膠特性的影響機(jī)制
評(píng)論
0/150
提交評(píng)論