Java——線程

Thread類(lèi)

線程安全

如果有多個(gè)線程在同時(shí)運(yùn)行,而這些線程可能會(huì)同時(shí)運(yùn)行這段代碼。程序每次運(yùn)行結(jié)果和單線程運(yùn)行的結(jié)果是一樣的,而且其他的變量的值也和預(yù)期是一樣的,就是線程安全的

多線程訪問(wèn)了共享的數(shù)據(jù),就會(huì)產(chǎn)生線程安全問(wèn)題

線程同步:
  1. 同步代碼塊
    synchronized關(guān)鍵字可以用于方法中的某個(gè)區(qū)塊中,表示只對(duì)這個(gè)區(qū)塊的資源實(shí)行互斥訪問(wèn)
synchronized(同步鎖) { 代碼塊 }

同步鎖可以使用任意類(lèi)型,多個(gè)線程要使用同一把鎖

  1. 同步方法
    使用synchronized修飾的方法就叫做同步方法,保證A線程執(zhí)行該方法的時(shí)候,其他線程只能在方法外等待
    對(duì)于非靜態(tài)方法,同步鎖是this
    對(duì)于靜態(tài)方法,使用當(dāng)前方法所在類(lèi)的字節(jié)碼對(duì)象作為同步鎖
  2. 鎖機(jī)制 java.util.concurrent.locks.Lock
    lock() 加同步鎖
    unlock() 釋放同步鎖
    java.util.concurrent.locks.ReentraitLock implements Lock
線程狀態(tài):
  • NEW 新建態(tài)
    線程剛剛被創(chuàng)建,但是并未啟動(dòng),還沒(méi)調(diào)用 start() 方法
  • Runnable 可運(yùn)行態(tài)
    線程可以在jvm中運(yùn)行的狀態(tài),可能正在執(zhí)行代碼,也可能沒(méi)有,這取決于cpu調(diào)度
  • Blocked 鎖阻塞態(tài)
    當(dāng)一個(gè)線程試圖獲取鎖對(duì)象,而該鎖對(duì)象被其他線程所持有的,則該線程進(jìn)入Blocked狀態(tài);當(dāng)該線程持有鎖對(duì)象時(shí),該線程將變成Runnable狀態(tài)
  • Waiting 無(wú)限等待態(tài)
    一個(gè)線程在等待另一個(gè)線程執(zhí)行一個(gè)(喚醒)動(dòng)作時(shí),該線程進(jìn)行Waiting狀態(tài)。進(jìn)入這個(gè)狀態(tài)后是不能自動(dòng)喚醒的,必須等待另一個(gè)線程調(diào)用notify或者notifyAll方法才能夠喚醒
  • Timed Waiting 計(jì)時(shí)等待態(tài)
    同Waiting狀態(tài),有幾個(gè)方法有超時(shí)參數(shù),調(diào)用它們將進(jìn)入Timed Waiting狀態(tài)。這一狀態(tài)將一直保持到超時(shí)期滿或者接收到喚醒通知。帶有超時(shí)參數(shù)的常用方法有Thread.sleep, Object.wait
  • Terminated 死亡態(tài)
    run方法執(zhí)行完成或者調(diào)用stop方法后,線程進(jìn)入Terminated狀態(tài)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容