/**
* 多個執行緒買票:安全
*/public class unsafebuyticket implements runnable
}//synchronized:鎖
//執行緒安全實現機制:佇列+鎖
private synchronized void buyticket()
try catch (interruptedexception e)
//列印票數
system.out.println(thread.currentthread().getname()+"買到了第"+(ticketnum--)+"張票");
}//主方法,開啟三個執行緒操作乙個物件
public static void main(string args)
}
那麼為什麼用了synchronized這個關鍵字就會安全了,執行緒安全的實現機制就是佇列+鎖,我們在乙個執行緒進入運算元據的時候,其他執行緒在外面排隊等候,並將這個資料鎖起來,就不會產生執行緒不安全了。
再看以下案例:
public class safelist ).start();
}for (int i = 5; i > 0; i--)
system.out.println(list.size());
}}
輸出:
倒計時5
倒計時4
倒計時3
倒計時2
倒計時1
9999
我們發現本來集合的大小因該是10000,但是最後卻輸出的是9999.那麼我們給執行緒加上鎖試試:
public class safelist
}).start();
}for (int i = 5; i > 0; i--)
system.out.println(list.size());
}}
輸出:
倒計時5
倒計時4
倒計時3
倒計時2
倒計時1
10000
同步**塊預設鎖住的是this,我們視情況而定,看是哪個會發生資源的共用,分析是**導致執行緒不安全就鎖住**。
有同步**塊就有同步方法,同步方法只能鎖住的是this,就比如上面的賣票案例,就是利用的是同步方法。
Java執行緒同步問題synchronized
android usb 讀寫以前都是一讀一寫,但有些機器會出問題。就採用讀寫非同步的方法。使用物件鎖,object自帶的,然後使用object的方法wait和notify notifyall 使用方法簡單,記錄下 public synchronized int lra setregister int...
java 執行緒 執行緒同步
threadlocal與其它同步機制的比較 threadlocal和其他所有的同步機制都是為了解決多執行緒中的對同一變數的訪問衝突。在普通的同步機制中,是通過對物件加鎖來實現多個執行緒對同一變數的安全訪問的。這時該變數是多個執行緒共享的,使用這種同步機制需要很細緻的分析在什麼時候對變數進行讀寫,什麼...
java同步執行緒
同步執行緒 synchronized方法 乙個類中任何方法都可以定義為synchronized方法以防止多執行緒資料崩潰。當某個物件用synchronized方法修飾時,表明該物件在任一時刻只能由乙個執行緒訪問。宣告方法體的一般格式 modifier synchronized returntype ...