java封装弊端_JAVA-初步认识-第十三章-同步的好处和弊端
一. 同步的原因
synchronized的代碼塊的封裝作用,我們已經(jīng)認(rèn)識(shí)到了。但是它到底是怎么起到作用,現(xiàn)在來(lái)討論一下。
這里面有一個(gè)對(duì)象,我們先簡(jiǎn)單地將它理解為標(biāo)志位。這標(biāo)志位怎么用的呢?
現(xiàn)在假想標(biāo)志位有0和1,如果先來(lái)的默認(rèn)值是1。這時(shí),來(lái)了四個(gè)不同編號(hào)的線(xiàn)程,0~3。
0線(xiàn)程進(jìn)來(lái)后,synchronized后面的標(biāo)志位為1,(1代表著開(kāi)著),進(jìn)來(lái)后,就把1置為了0。標(biāo)志位在0和1之間,進(jìn)行了切換。
0和1可以理解為真假的假。當(dāng)標(biāo)志位為0的時(shí)候,后面的線(xiàn)程1,2,3讀synchronized的時(shí)候,都進(jìn)不來(lái)。
當(dāng)0線(xiàn)程進(jìn)來(lái)后,經(jīng)過(guò)判斷,開(kāi)始執(zhí)行語(yǔ)句,try里面有一個(gè)sleep語(yǔ)句。一旦0線(xiàn)程運(yùn)行了sleep語(yǔ)句,cpu就開(kāi)始切換到其他線(xiàn)程上了。
0線(xiàn)程釋放了資格,釋放了執(zhí)行權(quán)。但是拿到執(zhí)行權(quán)的其他線(xiàn)程,由于標(biāo)志位為0,都進(jìn)不來(lái)。這時(shí),0線(xiàn)程醒了,執(zhí)行完剩下的語(yǔ)句,就直接退出了。0線(xiàn)程剛推出的時(shí)候,就把標(biāo)志位0變?yōu)榱?。按照這個(gè)道理,1~3線(xiàn)程都是一樣的過(guò)程。
這樣一來(lái),object就像鎖一樣。這是對(duì)象鎖,或者同步鎖。剛才說(shuō)的標(biāo)志位概念并不存在,真正的概念是鎖。
為什么要放一個(gè)對(duì)象鎖進(jìn)來(lái),后期要對(duì)同步中的線(xiàn)程進(jìn)行監(jiān)視,因?yàn)楸O(jiān)視的方法都在鎖上呢。
對(duì)象鎖,同步地解決線(xiàn)程安全的原因。到這,同步的基本特點(diǎn)就介紹完了。
二. 同步的特點(diǎn)
線(xiàn)程里的問(wèn)題很多,這里只是解決了部分問(wèn)題。(同步應(yīng)該說(shuō)的是多個(gè)代碼語(yǔ)句一起執(zhí)行,比如這里的if判斷,和try,以及輸出語(yǔ)句)
0線(xiàn)程進(jìn)到synchronized代碼塊中后,會(huì)一直持有cpu的執(zhí)行權(quán)么?不會(huì),如果一直持有,那么其他程序根本運(yùn)行不了,比如說(shuō)QQ,360....這就意味著,此時(shí),cpu的執(zhí)行權(quán)會(huì)切換到其他線(xiàn)程上,如1~3,但是無(wú)論這三個(gè)線(xiàn)程誰(shuí)拿到執(zhí)行權(quán),都會(huì)被判斷同步鎖,判斷完,進(jìn)不去。相當(dāng)于無(wú)效判斷,所以效率會(huì)有點(diǎn)低。
這個(gè)效率低是可以在我們的承受范圍之內(nèi)的。
總結(jié)
以上是生活随笔為你收集整理的java封装弊端_JAVA-初步认识-第十三章-同步的好处和弊端的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java的annotation_Java
- 下一篇: java二维整型数组 各行和排序_jav