java线程通信概念_java基础线程总结(线程概念、线程创建方式、线程间通信、线程重要方法)...
基礎(chǔ)篇之《線程》
@author :kern
————————————————————————————————————————————————————————————————
一:進(jìn)程:是一個(gè)正在執(zhí)行的程序。每一個(gè)進(jìn)程都有一個(gè)執(zhí)行順序,該順序是一個(gè)執(zhí)行路徑,或者叫一個(gè)執(zhí)行單元。
二:線程:是進(jìn)程中的一個(gè)獨(dú)立的控制單元,線程在控制著進(jìn)程的執(zhí)行。一個(gè)進(jìn)程中至少有一個(gè)線程。
三:多線程:
3.1 繼承Thread類創(chuàng)建線程
方法:①創(chuàng)建一個(gè)類繼承Thread類。
②復(fù)寫(xiě)Thread類的run方法。
③創(chuàng)建子類對(duì)象,調(diào)用Thread類的start方法,該方法作用是開(kāi)始線程,調(diào)用run方法。
3.2線程的運(yùn)行狀態(tài):
① 創(chuàng)建
② 運(yùn)行
③ 凍結(jié) 有兩種情況,一是sleep(時(shí)間),時(shí)間一到就喚醒了;二是wait(),要被notify()喚醒。
④ 消亡 有兩種情況,一是stop(),二是run()方法運(yùn)行結(jié)束后,線程會(huì)自動(dòng)消亡。
⑤ 阻塞 又叫臨時(shí)狀態(tài),即有執(zhí)行資格但是沒(méi)有執(zhí)行權(quán)。
3.3 實(shí)現(xiàn)Runnable接口創(chuàng)建線程
方法:①創(chuàng)建類然后實(shí)現(xiàn)Runnable接口。
②復(fù)寫(xiě)Runnable接口的run()方法。
③通過(guò)Thread類創(chuàng)建線程對(duì)象,
④創(chuàng)建Runnable接口的子類對(duì)象,然后將其對(duì)象作為實(shí)際參數(shù)傳遞給Thread類的構(gòu)造函數(shù)。
⑤調(diào)用Thread類的start()方法,開(kāi)啟線程調(diào)用run()方法。
3.4 繼承和實(shí)現(xiàn)的區(qū)別:
實(shí)現(xiàn)Runnable接口避免了單繼承的局限性。Runnable實(shí)現(xiàn)的同時(shí)還可以繼承。
3.5 線程的安全問(wèn)題:這里就說(shuō)說(shuō)線程中我們最常見(jiàn)的問(wèn)題---執(zhí)行資格和執(zhí)行權(quán)的問(wèn)題。
a。問(wèn)題原因:當(dāng)多條語(yǔ)句在操作同一個(gè)線程共享數(shù)據(jù)時(shí),一個(gè)線程對(duì)多條語(yǔ)句只執(zhí)行了一部分,還沒(méi)有執(zhí)行完,
另一個(gè)線程參與進(jìn)來(lái)執(zhí)行,導(dǎo)致共享數(shù)據(jù)的錯(cuò)誤。
b。解決方案:對(duì)多條線程作為共享數(shù)據(jù)語(yǔ)句,只能讓一個(gè)線程都執(zhí)行完了。在執(zhí)行的過(guò)程中,其他線程不可以參與執(zhí)行。
同步代碼塊:synchronized(對(duì)象)
{
需要被同步的代碼;
}
注:對(duì)象可以為任意對(duì)象 如:Object obj=new Object(); 對(duì)象如同鎖,持有鎖的可以再同步中執(zhí)行,
沒(méi)有持有鎖的即使獲取cpu的執(zhí)行權(quán)也進(jìn)不去。
3.5 同步的兩種表現(xiàn)形式:
a。同步代碼塊;見(jiàn)3.4
b。同步函數(shù):直接將synchronized作為修飾符修飾函數(shù)。
3.6 鎖;a。同步函數(shù)用的是哪一個(gè)鎖呢?
函數(shù)需要被對(duì)象調(diào)用,那么函數(shù)都有一個(gè)所屬對(duì)象,就是this。所以同步函數(shù)使用的鎖是this。
b。如果同步函數(shù)被靜態(tài)修飾,那么使用的鎖是什么呢?
靜態(tài)方法中不可以定義this。靜態(tài)進(jìn)內(nèi)存時(shí),內(nèi)存中沒(méi)有本類對(duì)象,但是一定有該類對(duì)應(yīng)的字節(jié)碼文件。
類名。class,該對(duì)象的類型是class。所以靜態(tài)同步方法,使用的鎖是該方法所在類的字節(jié)碼文件,類名。class;
四:線程間通信 :就是多個(gè)線程操作同一個(gè)資源,單單是操作的動(dòng)作不同;
4.1 wait(),notify(),notifyAll(),用來(lái)操作線程,為什么定義在Object類中?
a。這些方法存在與同步中。
b。使用這些方法時(shí)必須要標(biāo)識(shí)所屬的同步的鎖;
c。鎖可以使任意對(duì)象,所以任意對(duì)象調(diào)用的方法一定定義在Object類中。
☆ 也就是說(shuō),等待和喚醒必須是同一個(gè)鎖,而鎖可以是任意對(duì)象所以可以被任意對(duì)象調(diào)用的方法定義在Object類中。
4.2 wait(),sleep()有什么區(qū)別?
wait()釋放資源,釋放鎖。
sleep()釋放資源,不釋放鎖。
4.3 JDK1.5的特性:提供了多線程升級(jí)解決方案。
a。將同步synchronized替換成Lock操作。
b。將Object中的wait,notify,notifyAll替換成condition對(duì)象。該對(duì)象可以通過(guò)Lock鎖進(jìn)行獲取。
4.4 停止線程:
a。如何停止線程呢?
·原理:只有一種,run()方法結(jié)束。開(kāi)啟多線程運(yùn)行,運(yùn)行代碼往往是循環(huán)結(jié)構(gòu),只要控制循環(huán)語(yǔ)句,就可以讓run()方法結(jié)束。
·特殊情況:當(dāng)線程處于停滯狀態(tài)時(shí),就無(wú)法讀取標(biāo)記結(jié)束循環(huán)語(yǔ)句,那么線程就不會(huì)結(jié)束,這時(shí)需要對(duì)凍結(jié)進(jìn)行清除。
強(qiáng)制讓線程恢復(fù)到運(yùn)行狀態(tài),這樣就可以操作標(biāo)記結(jié)束線程。于是Thread類中提供了方法interrupt().
4.5 守護(hù)線程:void setDaemon(boolean on) 該方法必須在啟動(dòng)線程前使用。
4.6 join() 等待線程終止:即當(dāng)A線程運(yùn)行到B線程的join方法時(shí),那么A線程就會(huì)等待,等待B線程全部運(yùn)行結(jié)束再運(yùn)行。
4.7 優(yōu)先級(jí);指線程搶到CUP的執(zhí)行權(quán)的頻率。默認(rèn)優(yōu)先級(jí)為5,最高為10;設(shè)置優(yōu)先級(jí)setPriority()方法。
-----------------------------------------------------------------------------------------------------
我是一個(gè)菜菜菜菜鳥(niǎo),想飛卻怎么也飛不高,尋尋覓覓,尋尋覓覓·····
自學(xué)的過(guò)程中總結(jié)出來(lái)的一些關(guān)于函數(shù)的知識(shí)點(diǎn),我就當(dāng)一次復(fù)習(xí)了。
有需要的可以參考一下,如有漏掉的或者不完善的謝謝大家指正。
總結(jié)
以上是生活随笔為你收集整理的java线程通信概念_java基础线程总结(线程概念、线程创建方式、线程间通信、线程重要方法)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ue4加载本地版本_【虚幻4】创建本地数
- 下一篇: java数据类型代表价格_解读Java数