系統(tǒng)的資源是有限的,必須在不同的進(jìn)程之間共享。資源必須在給定時(shí)間由一個(gè)進(jìn)程使用,這稱為進(jìn)程同步。在Java中,信號(hào)量用于實(shí)現(xiàn)進(jìn)程同步。Java中的信號(hào)量是一種線程同步構(gòu)造,通過向線程發(fā)送信號(hào)并保護(hù)關(guān)鍵部分來避免線程之間的信號(hào)丟失。通過使用計(jì)數(shù)器,信號(hào)量管理對(duì)共享資源的訪問。如果你也打算從事java行業(yè),可以參加java培訓(xùn)來提升自己,有老師帶你快速入門,很快就能掌握java知識(shí)和技能。
什么是Java中的信號(hào)量?
Java中的信號(hào)量是用于管理并行運(yùn)行的進(jìn)程的變量。它是一個(gè)非負(fù)變量,表示系統(tǒng)中某個(gè)時(shí)間點(diǎn)可用的資源數(shù)量。通過使用計(jì)數(shù)器,信號(hào)量控制共享資源,以確保同時(shí)運(yùn)行的線程能夠訪問資源并避免競(jìng)爭(zhēng)條件。因此,信號(hào)量通過使用同步構(gòu)造來保護(hù)關(guān)鍵部分。
信號(hào)量有兩種類型:
1.計(jì)數(shù)信號(hào)量
信號(hào)量變量用可用資源的數(shù)量初始化。當(dāng)進(jìn)程需要獲取共享資源時(shí),將調(diào)用wait()函數(shù),信號(hào)量的值將減少1。使用資源完成流程后,通過調(diào)用signal()函數(shù)將其釋放。變量的值增加1。當(dāng)信號(hào)量值為0時(shí),所有資源都不可用,進(jìn)程必須等待資源釋放。
2.二進(jìn)制信號(hào)量
在二進(jìn)制信號(hào)量中,變量的值將是0或1。該值在開始時(shí)設(shè)置為1,如果進(jìn)程想要使用共享資源,它可以調(diào)用wait()函數(shù),值從1變?yōu)?。使用資源完成流程后,通過調(diào)用signal()函數(shù)將其釋放。變量的值從0變?yōu)?。當(dāng)信號(hào)量的值為0時(shí),一個(gè)進(jìn)程必須等待獲取共享資源,該共享資源必須由前一個(gè)進(jìn)程釋放。想要快速學(xué)會(huì)java技能,建議報(bào)名參加java培訓(xùn),有明確清晰的學(xué)習(xí)路線,系統(tǒng)規(guī)范的課程,專業(yè)講師面授指導(dǎo)教學(xué),可以在短時(shí)內(nèi)獲得很大提升。
信號(hào)量是如何工作的?
信號(hào)量計(jì)數(shù)器的值為0或更高。
l 當(dāng)計(jì)數(shù)器的值大于0時(shí),允許線程訪問共享資源,計(jì)數(shù)器值減少1。
l 否則,在獲得許可之前,線程將被阻塞。
l 線程完成執(zhí)行后,將釋放不再需要的資源。釋放資源后,計(jì)數(shù)器值將增加1。
l 等待獲取相同資源的另一個(gè)線程現(xiàn)在可以獲得訪問該資源的許可。
l 如果計(jì)數(shù)器為0,則拒絕訪問資源的權(quán)限
以下流程圖說明了信號(hào)量的工作:
定時(shí)信號(hào)量
顧名思義,定時(shí)信號(hào)允許線程運(yùn)行特定的時(shí)間。時(shí)間一過,所有權(quán)限都將被釋放,計(jì)時(shí)器將被重置。
總結(jié)
java 計(jì)數(shù)信號(hào)量用來控制訪問某個(gè)特定資源的操作數(shù)量,或者同時(shí)執(zhí)行某個(gè)指定操作的數(shù)量,還可以用來實(shí)現(xiàn)某種資源池,或者對(duì)容器施加邊界。想掌握 Java 技術(shù)的同學(xué)不妨報(bào)個(gè)Java培訓(xùn)班,可以節(jié)省學(xué)習(xí)時(shí)間,提高學(xué)習(xí)效率,在短時(shí)間內(nèi)學(xué)有所成,還能找到一份不錯(cuò)的工作。