開始時間 2023年8月12日20:09:02
結束時間 2023年8月12日22:44:44
累計時間 2小時
原因;操作同乙個資料中間切換的時候,乙個執行緒操作共享資料的時候,未執行完的情況下 ,另外的執行緒參與進來,導致安全問題。
解決方案;
乙個執行緒操作共享資料完畢之後,其他執行緒才可以操作。 比如上廁所要排隊乙個乙個來。
synchronized(同步監視器)注意共同操作的資料 不能是區域性變數 所有執行緒必須共用同一把鎖(即 鎖要用static 修飾)* 1.共享資料:多個執行緒共同操作的同乙個資料(變數)
* 2.同步監視器:由乙個類的物件來充當。哪個執行緒獲取此監視器,誰就執行大括號裡被同步的**。俗稱:鎖
* 要求:所有的執行緒必須共用同一把鎖!
* 注:在實現的方式中,考慮同步的話,可以使用this來充當鎖。但是在繼承的方式中,
慎用this:
1 在一般的方法中 可以使用。
2 在靜態類的話當前類本身充當鎖。
原理如下
乙個執行緒搶到鎖之後 其他執行緒在當前執行緒結束之後才可以進入操作**塊的語句。
鎖可以由任意類物件充當~ 如果使用this的話。
三個物件各自物件的鎖 還是會出現安全問題。
+ "售票,票號為:" + ticket--);}}
} }}public class testwindow2
}class animal
將操作共享資料的方法宣告為synchronized。即此方法為同步方法,能夠保證當其中乙個執行緒執行* 此方法時,其它執行緒在外等待直至此執行緒執行完此方法。
* 同步方法的鎖:this
執行緒的同步的弊端:由於同乙個時間只能有乙個執行緒訪問共享資料,效率變低了。
class window4 implements runnable
} public synchronized void show() catch (interruptedexception e)
system.out.println(thread.currentthread().getname() + "售票,票號為:"
+ ticket--);
} }}public class testwindow4
}
補充單例模式 兩種比較&雙重鎖模式
實際開發比較推薦雙重鎖
//關於懶漢式的執行緒安全問題:使用同步機制
//對於一般的方法內,使用同步**塊,可以考慮使用this。
//對於靜態方法而言,使用當前類本身充當鎖。
Java單例設計模式,多執行緒下同步
單例模式的特點 只建立一次 私有的屬性 公有的訪問方法 單例模式的分類 懶漢 lazysingleton 預設不自動例項化,等到用的時候根據當前情況例項化,並且返回當前物件 惡漢 eagersingleton 在類第一次載入的時候強制例項化 用處 一般用在配置檔案的讀取,有些東西只需要載入一次,以後...
pthread once與執行緒安全的單例模式
在單例模式的class設計的時候,常常會看到一種寫法 if null return 這個辦法叫做double check locking 縮寫為dcl 在 linux多執行緒服務端 一書中,作者提出dcl已經靠不住,並提出了使用pthread once來實現單例的執行緒安全。include int ...
單例模式(一)static final和單例模式
那天我朋友問了我個問題,static和單例模式有什麼區別,所以我覺得static可以講一下 他的問題是,把物件弄成static是不是就不變了 顯然,這是還沒弄清楚引用和物件的區別 其實存放在靜態區中的是引用,而不是物件。而物件是存放在堆中的。如果有這樣一句話 public static final ...