3 回答

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
java虛擬機(jī)采用搶占式調(diào)度模型,是指優(yōu)先讓可運(yùn)行池中優(yōu)先級(jí)高的線程占用CPU,如果可運(yùn)行池中的線程優(yōu)先級(jí)相同,那么就隨機(jī)選擇一個(gè)線程,使其占用CPU。處于運(yùn)行狀態(tài)的線程會(huì)一直運(yùn)行,直至它不得不放棄CPU

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