訊號量是乙個計數器,用來保護乙個或多個共享資源的訪問。當執行緒訪問乙個乙個共享資源時,它必須得先獲取訊號量,如果訊號量大於0,則訊號量減一,該執行緒允許訪問共享資源。當訊號量等於0,則執行緒將會被置於休眠,直到訊號量大於0
public
class
semaphoretest
/** * 新增
* @param d
*/public
void
add(double d)
thread.
sleep
(1000);
system.out.
println
(thread.
currentthread()
.getname()
+": add end");
}catch
(interruptedexception e)
finally
}/**
* 獲取
*/public double get()
thread.
sleep
(1000);
system.out.
println
(thread.
currentthread()
.getname()
+": get end");
return d;
}catch
(interruptedexception e)
finally
}public
static
void
main
(string[
] args)})
.start()
;}for(
int i =
0; i <
3; i++)}
).start()
;}}}
public
class
countdownlatchtest
finally
// 等待其他執行緒準備
latch.
await()
; system.out.
println
(thread.
currentthread()
.getname()
+": 準備完成, 開始執行任務...");
}catch
(interruptedexception e)})
.start()
;}}}
public
class
cyclicbarrierstudy}}
// 列印正確結果資訊,用於後面的校驗
system.out.
printf
("需查詢的數值 %d 共出現 %d 次發\n"
, number, count);}
public
int[
]getdata
(int index)
public
static
void
main
(string[
] args)
system.out.
printf
("查詢結束,數值 %d 共出現 %d 次\n"
, number, count);}
);// 用執行緒計算每組的出現的數量
for(
int i =
0; i < size; i++)}
// 儲存該組陣列**現指定資料的次數
countdata[index]
= count;
system.out.
println
(thread.
currentthread()
.getname()
+" search end");
trycatch
(interruptedexception
| brokenbarrierexception e)})
.start()
;}}}
phaser
示例,控制各階段的同步
public
class
phasertest
}for
(int i =
0; i < len; i++
)else
system.out.
println
(thread.
currentthread()
.getname()
+": 開始第三階段");
system.out.
println
(thread.
currentthread()
.getname()
+": "
+ arrays.
tostring
(data[index]))
;}).
start()
;}}}
public
class
exchangertest
static
class
producer
implements
runnable
@override
public
void
run(
)catch
(interruptedexception e)
system.out.
println
("消費者現有資料數量: "
+ data.
size()
);index++;}
}}static
class
consumer
implements
runnable
@override
public
void
run(
)catch
(interruptedexception e)
system.out.
println
("消費的資料: "
+ data.
poll()
);index++;}
}}}
java併發程式設計 執行緒同步
sysynchronized關鍵字可以修飾方法 塊,但不能修飾構造器 成員變數等。當sysynchronized關鍵字同來修飾方法和 塊時,能夠保證同一時刻最多只有乙個執行緒執行該段 或方法。防止當有兩個執行緒併發修改同乙個檔案時可能會造成異常。同步 塊語法 synchronized obj 複製 ...
併發技術中同步
如果程式中用到了併發技術,一段 需要修改資料,同時其他 需要訪問同一資料。同步的型別 a.通訊 b.資料保護。如果以下三個條件都滿足,就需要使用同步來保護資料。多個執行緒需要安全的讀寫共享資料。乙個執行緒進入鎖後,在鎖被釋放之前,其他執行緒是無法進入的。鎖的使用,有四條重要的規則 首先,要盡量限制鎖...
JAVA 併發程式設計 同步工具類
countdownlatch 閉鎖 閉鎖是一種同步工具類,可以延遲線程的進度知道其到達終止狀態。閉鎖的作用相當於一扇門 await 在閉鎖到達結束狀態之前,這扇門一直是關閉的,不允許任何執行緒通過,當到達結束狀態時 所有執行緒均到達countdown 這扇門會開啟並且允許所有的執行緒通過。而且,當門...