但聽過這麼多
但是到底是啥東西??
簡單的說 : 你要使用此物件、方法,你就是要
排隊!!!
排隊!!!
排隊!!!
但是前者結束,後者要搶!!!
為啥要排隊?不是直接使用就好了嗎??
當然也行,但在銀行的例子就不可行
在同一時間只能一個人做領錢的動作
直到確認把錢交至手上為止
下一個人才能領錢或存錢
那寫哪種程式比較常遇到 ?
檔案接收完整性、資料存取之類
以下圖示針對銀行例子做圖解
( 左 : 同時領錢 , 右 : 排隊領錢 )
以下是用範例呈現 :
1 . 不使用 Synchonized
2 . 使用 Synchonized
多次執行,結果相同。
以下是範例程式碼 : ( 請自行更改 synchronized 需求 )
Test.java
public class Test {
public static void main(String[] args) {
TestThread.Threading("1");
TestThread.Threading("2");
}
}
TestThread.java
public class TestThread {
public static void Threading(String message){
new Threading(message).start();
}
public static class Threading extends Thread {
private String _strMessage;
Threading(String strMessage){
this._strMessage = strMessage;
}
public void run() {
// synchronized (TestThread.class) {
try {
for(int i=0; i < 5; i++){
Thread.sleep(1000);
System.out.println(_strMessage + " : " + i);
}
} catch (InterruptedException e) {
}
// }
}
}
}
注意 :
因為線程的執行本身就是不確定的
加了 Synchronizes 只能確保這段程式碼和參數
並不能保證程序的執行順序!!!
如果真的要有順序,先暫時用 Sleep 頂替。
參考資料 : [Java] Synchronized 心得
參考資料 : JAVA筆記-synchronized 同步物件資料,避免Race Condition
歡迎轉載,請註明出處。
沒有留言:
張貼留言