3 回答

TA貢獻1813條經驗 獲得超2個贊
java虛擬機采用搶占式調度模型,是指優先讓可運行池中優先級高的線程占用CPU,如果可運行池中的線程優先級相同,那么就隨機選擇一個線程,使其占用CPU。處于運行狀態的線程會一直運行,直至它不得不放棄CPU

TA貢獻2080條經驗 獲得超4個贊
一段synchronized的代碼被一個線程執行之前,他要先拿到執行這段代碼的權限,在 java里邊就是拿到某個同步對象的鎖(一個對象只有一把鎖); 如果這個時候同步對象的鎖被其他線程拿走了,他(這個線程)就只能等了(線程阻塞在鎖池 等待隊列中)。 取到鎖后,他就開始執行同步代碼(被synchronized修飾的代碼);線程執行完同步代碼后馬上就把鎖還給同步對象,其他在鎖池中 等待的某個線程就可以拿到鎖執行同步代碼了。這樣就保證了同步代碼在統一時刻只有一個線程在執行。
眾所周知,在Java多線程編程中,一個非常重要的方面就是線程的同步問題。
關于線程的同步,一般有以下解決方法:
1. 在需要同步的方法的方法簽名中加入synchronized關鍵字。
2. 使用synchronized塊對需要進行同步的代碼段進行同步。
3. 使用JDK 5中提供的java.util.concurrent.lock包中的Lock對象。
另外,為了解決多個線程對同一變量進行訪問時可能發生的安全性問題,我們不僅可以采用同步機制,更可以通過JDK 1.2中加入的ThreadLocal來保證更好的并發性。
- 3 回答
- 0 關注
- 1050 瀏覽
添加回答
舉報