线程02
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
線程中有幾個(gè)方法需要我們區(qū)分
1 sleep方法是表示線程執(zhí)行到這的時(shí)候只是暫時(shí)處于“睡眠”狀態(tài),在這種狀態(tài)下線程是不會(huì)釋放CPU資源的,當(dāng)?shù)竭_(dá)休眠時(shí)間后,線程繼續(xù)“起來”干活。當(dāng)線程處于sleep狀態(tài)時(shí)別的線程不可以訪問被鎖定的對(duì)象。
2 yield方法指的是該線程暫時(shí)釋放出CPU資源把CPU資源讓給其他線程,它重回就緒狀態(tài)等待CPU分配給相應(yīng)的CPU時(shí)間片給它然后再執(zhí)行。
3 wait方法指線程進(jìn)入等待狀態(tài),此時(shí)別的線程可以訪問被鎖定的對(duì)象,當(dāng)線程處于wait狀態(tài)時(shí),只有調(diào)用notify方法才能將線程“喚醒”讓該線程重新進(jìn)入就緒狀態(tài)。
線程的同步一般有兩種一種是同步代碼塊,同步代碼塊后面有個(gè)括號(hào),里面可以選擇是同步對(duì)象還是同步類字節(jié)碼。當(dāng)你同步的方法中有static修飾的時(shí)候那么鎖的是字節(jié)碼。同步普通方法的話是當(dāng)前對(duì)象,同步靜態(tài)方法的話是同步的類字節(jié)碼。靜態(tài)變量是這個(gè)類初始化的時(shí)候,靜態(tài)變量已經(jīng)幫你初始化好,并且放到靜態(tài)區(qū)了,你實(shí)例化出來的對(duì)象的靜態(tài)變量都指向靜態(tài)區(qū)中的那個(gè)靜態(tài)變量的地址值。
所以當(dāng)我們使用線程同步時(shí),要明確鎖的資源,到底是鎖字節(jié)碼還是鎖對(duì)象。如果同時(shí)鎖一個(gè)資源那就是互斥了。
線程只能start一次,再次啟動(dòng)時(shí)會(huì)報(bào)異常 IllegalThreadStateException。
JVM就是多線程的,主方法是個(gè)線程,垃圾回收也是個(gè)線程。
啟動(dòng)多線程的話有有三種方法
1 設(shè)計(jì)一個(gè)Thread子類并重寫其run方法,實(shí)例化這個(gè)子類,并且使用這個(gè)類的start方法。
2 設(shè)計(jì)一個(gè)測(cè)試類實(shí)現(xiàn)runable接口,并在這個(gè)類中重寫run方法,實(shí)例化一個(gè)線程把測(cè)試類當(dāng)作構(gòu)造參數(shù),來構(gòu)造一個(gè)新的Thread類。
3?使用匿名類,繼承Thread,重寫run方法,直接在run方法中寫業(yè)務(wù)代碼。匿名類的一個(gè)好處是可以很方便的訪問外部的局部變量。前提是外部的局部變量需要被聲明為final。(JDK7以后就不需要了)
轉(zhuǎn)載于:https://my.oschina.net/u/3544267/blog/1383048
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 主打“云安全” 迅雷系帝恩思登陆新三板
- 下一篇: 微型计算机2020年7月下,2020年年