Java——線程

Thread類

線程安全

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

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

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

同步鎖可以使用任意類型,多個線程要使用同一把鎖

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

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