版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
程序員JAVAJAVA學(xué)習(xí)筆記2013-05-2717:33149(0收藏-------androidjavajava-概進程:是一個正在執(zhí)行中的程序。每一個進程執(zhí)行都有一個執(zhí)行順有一個線程。行。多線程存在的意義:充分利用cpu的空閑時間,提高進程的整體運行創(chuàng)建線程的兩種方Thread類子類覆蓋父類中的run方法,將線程運行的代碼存放在中建立子類對象的同時線程也被創(chuàng)建通過調(diào)用start方法開啟線示例代碼[java][java] classDemoextends{ publicvoid{ for(inti={ System.out.println(“demorun---}}10.13.13.{d.start();//調(diào)用start方法執(zhí)行該線程的run19.}DemodnewDemo();//publicstaticvoidmain(String[]12.classRunnable接口子類覆蓋接口中的run方Thread類創(chuàng)建線程,并將實現(xiàn)了Runnable的子類對象作為參數(shù)傳遞給Thread構(gòu)造函數(shù)。[java] classTestimplement{publicvoidrun()//[java] classTestimplement{publicvoidrun()//run方{for(intx=0;x<60;{}}11.14.class15.publicvoidmain(String[]{TesttenewTest();實現(xiàn)Runnable接口的對ThreadnewThread(te);將那個對象作為參數(shù)傳遞到Thread Threadt2=new t1.start();//調(diào)用Thread類的start方法開啟線 24.兩種線程創(chuàng)建方式的區(qū)別繼承Thread創(chuàng)建對Thread子類無法再從其它類繼承(java語言單承)可直接操作
編寫簡單,run()方法的當(dāng)前對象就是線程對象使用Runnable接口創(chuàng)建線程可以將CPU,代碼和數(shù)據(jù)分開,形成清晰的模型線程體run()方法所在的類可以從其它類中繼承一有利于保持程序的設(shè)計風(fēng)格一致繼承Thread線程代碼存放于Thread子類run方法中實現(xiàn)Runnable接口線程代碼存在于接口的run中,而問題:為什么要將Runnable接口的子類對象傳遞給Thread的構(gòu)造函答:因為自定義的run方法所屬的對象是Runnable接口的子類對象,所以要讓線程去執(zhí)行指定對象的run方法,就必須明確該run方法所線程的四種sleep方法需要指定睡眠時間,單位是毫秒權(quán)。線程的對象獲取與名稱的操線程都有自己的默認名稱,格式為:Thread-編號該編號從0始。staticThreadcurrentThread():獲取當(dāng)前線程對象。getName():獲取線程名稱。[java][java] classTestextends2. Test(Stringname)// publicvoidrun()// for(intx=0;x<60;{ Name()+"}}15.class{publicstaticvoidmain(String[]{Testt1newTest("one---");//調(diào)用構(gòu)造函數(shù)設(shè)置線程名Testt2=newfor(intx=0;x<60;{ }}31.線程的安導(dǎo)致安全問題的出現(xiàn)的原因多個線程出現(xiàn)延線程隨機響是非常大的synchronized(對象{需要同步的代}的功能。4個窗口售票示例[java][java] classTicketimplements2. privateinttick= ObjectobjnewObject();//建立一個obj類對象,供synchronized作參 publicvoid .sale:"+tick-- 17.19.class20. publicstaticvoidmain(String[] TickettnewTicket();//創(chuàng)建Ticket對象Thread對象作構(gòu)造函數(shù)的參用 Threadt1=new Threadt2=new Threadt3=new Threadt4=new //開始4個線}37.同步的前提 >同步需要兩個或者兩個以上的線 >多個線程使用的是同一未滿足這兩個條件,不能稱其同步鎖,這是很耗費資源的,無形中會降低程序的運行的效率。同步函格式:在函數(shù)上加上synchronized修飾符即可所屬對象,就是this。同步中嵌套同步,但是鎖卻不同,就會產(chǎn)生[java] 如:A線程A鎖,B線程持有B鎖,讓A線程去搶奪B鎖,B程去[java] 1.1.classDeadimplementsprivatebooleanb={}{{publicvoidthis.b=2.{{//0線程,持有了A //等待B{ {{//1線程就進來了,持有了B synchronized(Locks.locka)//等待獲得A{ }}}}}39.//創(chuàng)造class{publicstaticObjectlocka=newpublicstaticObjectlockb=new45.46.class47. publicvoid Deadd1new Deadd2new Thread=new Thread=new 57.線程間通多個線程操作同一個資源,但是操作的動作不注意:wait();notify();notifyAll(監(jiān)視器的線程操作,所以要使用在同步中,因為只有同步才具有鎖。問題:wait(),notify(),notifyAll()Object類中?這些方法存在與同步使用這些方法時必須要標(biāo)識所屬的同步的Object須是同一個鎖。問題:wait(),sleep()有什么區(qū)別wait():釋放cpu執(zhí)行權(quán),釋放鎖sleep():釋放cpu執(zhí)行權(quán),不釋放鎖新特性:JDK1.5之后新增了java.until.concurrent.locks這個包為JDK1.5中提供了多線程升級解決方案Synchronized換成LockObject中的wait,notifynotifyAll,替換了對象
該對象可以Lock獲取該示例中,實現(xiàn)了本方只喚醒對方操作代碼如下[java][java] 1.1.import3.classpublicstaticvoidmain(String[]Resourcer=newProducerpro=newThreadt2=newThreadt4=newThreadt3=newThreadt1=newConsumercon=new{4. 23.25.class26. privateString privateintcount= privatebooleanflag= privateLocklock=new privateConditioncondition_pro= privateConditioncondition_con= publicvoidset(Stringname)throws =name+"-- 者 flag= publicvoidout()throws { flag= { 71.classProducerimplements{privateResourceres;Producer(Resource{this.res= publicvoid{{{ catch(InterruptedException{} 95.97.classConsumerimplements98. privateResource Consumer(Resource this.res= publicvoid catch(InterruptedException 停止定義循環(huán)結(jié)束標(biāo)記(run方法結(jié)束因為線程運行代碼一般都是循環(huán),只要控制了循環(huán)即可使用interrupt(中斷)方注:stop方法已經(jīng)過時不再使用。特殊情況當(dāng)線程處于了凍結(jié)狀態(tài),就不會到標(biāo)記。那么線程就不會結(jié)束。當(dāng)沒有指定的方式讓凍結(jié)的線程恢復(fù)到運行狀態(tài)時,這時需要標(biāo)記讓線程結(jié)束。Thread提供該方法測試代碼[java][java] classStopThreadimplements2. privatebooleanflag publicsynchornizedvoid catch(InterruptedException flagfalse;// publicvoid flag= 24.26.class27. publicstaticvoidmain(String[] StopThreadst=new Threadt1=new Threadt2=new intnum= if(num++== 56.線程類的其他方setDaemon()就相當(dāng)于線程,當(dāng)前臺線程結(jié)束時,線程跟著也結(jié)束。注意:該方法必須在啟動線程前調(diào)用該方法首先調(diào)用該線程的checkAccess法,且不帶任何參數(shù)。這可能拋出SecurityException(在當(dāng)前線程中)[java] 用法示例代[java] classStopThreadimplements2. publicvoidrun()//原本run方法是一個死循環(huán),但是將線程定義為守護線程后,主程結(jié)束,run方法的線程立即也結(jié)束 10.11.class12. publicstaticvoidmain(String[] StopThreadst=new Threadt1=new Threadt2=new intnum= if(num++== 34.34.搶奪cpu執(zhí)行權(quán),適用于臨時加入線程用,先執(zhí)行完,其他線執(zhí)[java] 測試[java] 1.classDemoimplements2. publicvoid for(intx=0;x<70; 10.11.class12. publicstaticvoidmain(String[]args)throws Demod=new Threadt1=new Threadt2=new t1.join();//t1獲取cpu的執(zhí)行權(quán),主線程處于凍結(jié)狀態(tài),只有t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版人防工程施工合作合同版B版
- 2025年度企業(yè)健康管理與職工福利合同3篇
- 2024年簡約室內(nèi)裝潢協(xié)議
- 2024年標(biāo)準企業(yè)車輛租賃合同模板一
- 2024年長途客運與貨運聯(lián)運合同3篇
- 企業(yè)信息安全5篇范例
- 2024年車位買賣與租賃的綜合合同
- 2024薪資保密制度與員工職業(yè)發(fā)展及培訓(xùn)計劃合同3篇
- 榆林職業(yè)技術(shù)學(xué)院《JavaEE編程技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 華南理工大學(xué)《機器人傳感器及其信息融合技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025寒假散學(xué)典禮(休業(yè)式)上校長精彩講話:以董宇輝的創(chuàng)新、羅振宇的堅持、馬龍的熱愛啟迪未來
- 安徽省示范高中2024-2025學(xué)年高一(上)期末綜合測試物理試卷(含答案)
- 安徽省合肥市包河區(qū)2023-2024學(xué)年九年級上學(xué)期期末化學(xué)試題
- 售樓部保安管理培訓(xùn)
- 2024年高壓電工證理論考試題庫(含答案)
- 倉儲培訓(xùn)課件模板
- 2023-2024學(xué)年仁愛版七上期末考試英語(試題)
- 2024年醫(yī)院培訓(xùn)計劃
- GB/T 44914-2024和田玉分級
- 2023年湖南出版中南傳媒招聘筆試真題
- 2024年度企業(yè)入駐跨境電商孵化基地合作協(xié)議3篇
評論
0/150
提交評論