你這個不是死鎖,就是flag的判斷有問題,每個線程都是自己把自己鎖住了,當flag為true時,看以下兩段代碼:
成都創新互聯公司主要從事網站制作、成都網站制作、網頁設計、企業做網站、公司建網站等業務。立足成都服務河北,10余年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18980820575
public synchronized void set(String name) {
if (flag)
try {
wait();
public synchronized void out() {
if (flag)
try {
wait();
兩個線程都在wait,當然卡住不動了。
看你的代碼,把set那段改成這樣應該就好了:
public synchronized void set(String name) {
if (!flag)
try {
wait();
您好,提問者:
1、重要信息進行加密操作。
2、地址欄盡量采用post提交方式。
3、如果涉及多線程的話,可以使用Synchronized鎖。
下面例子:
public?class?Main{
public?static?void?main(String[]?args){
new?Thread(new?Suo()).start();
new?Thread(new?Suo()).start();
//開啟兩個線程,加鎖之后數據就不會出錯
}
}
class?Suo?implements?Runnable{
private?static?int?num?=?100;
public?synchronized?void?run(){
while(true){
if(num==0)
break;
else
System.out.println(num--);
}
}
}
public Object getObject(String key,Object o) {
synchronized (map) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}}// 格式沒法弄,自己弄一下
}
// demol0326 的回答意思使用MyTest的實例來加鎖,但是map是static的,無法鎖住
// MyTest的多個實例在多個線程中的請求
//禾木雙子 :如果A線程在getObject方法的第二行停止,此時B線程進入getObject后執行部分代碼, 此時B線程停止,A線程啟動,他不會執行'多線程處理', 仍然有線程線程安全問題,(想像一下更多的線程進入該方法的情況,num甚至會得到負值)
對象是一個鎖標志。按照先到先得的原則,如果有多個線程都會執行代碼,并使用同一個對象作為鎖,
synchronize(對象){ .... }
那么,先執行這段代碼的那個線程,將會獲得這個對象鎖,而當這個線程執行這段代碼的時候,其他線程也是使用這個對象作為鎖的,就不能執行這段代碼,知道最初得到這個鎖的線程運行完這段代碼,然后再把鎖分配給下一個線程執行。
分享文章:java鎖的代碼 java 各種鎖
鏈接地址:http://www.yijiale78.com/article16/ddjodgg.html
成都網站建設公司_創新互聯,為您提供商城網站、做網站、企業網站制作、微信小程序、企業建站、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯