Java并发编程—为什么wait/notify操作要先获取到锁?
生活随笔
收集整理的這篇文章主要介紹了
Java并发编程—为什么wait/notify操作要先获取到锁?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先,我們要清楚的是wait/notify操作是一種線程間同步機制。為什么要同步?因為多個線程要并發的訪問同一共享變量,所以需要線程間同步,防止他們之間相互沖突。同步的關鍵字是synchronized,并沒有明確的鎖的語義。下面是一張線程的生命周期的圖:
wait的原理圖:
是釋放鎖以后再進入等待隊列,還是進入等待隊列以后再釋放鎖?這里有一個疑問。我們看一下ObjcetMonitor.cpp源碼中,我們發現wait的源碼如下:
我們發現其實是需要先把線程加入到等待隊列,然后再釋放鎖。那么,我們是不是可以這樣說,一個線程只有獲取到鎖以后才能加入等待隊列,所以wait執行的時候要先獲取到鎖?
總結
以上是生活随笔為你收集整理的Java并发编程—为什么wait/notify操作要先获取到锁?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java并发编程—Atomic原子类
- 下一篇: Java并发编程—什么是线程?