JAVA執行緒的同步方法和單例模式執行緒安全筆記

2021-08-22 18:12:25 字數 2326 閱讀 9437

開始時間 2023年8月12日20:09:02

結束時間 2023年8月12日22:44:44

累計時間 2小時

原因;操作同乙個資料中間切換的時候,乙個執行緒操作共享資料的時候,未執行完的情況下 ,另外的執行緒參與進來,導致安全問題。

解決方案;

乙個執行緒操作共享資料完畢之後,其他執行緒才可以操作。  比如上廁所要排隊乙個乙個來。

synchronized(同步監視器)

* 1.共享資料:多個執行緒共同操作的同乙個資料(變數)

* 2.同步監視器:由乙個類的物件來充當。哪個執行緒獲取此監視器,誰就執行大括號裡被同步的**。俗稱:鎖

* 要求:所有的執行緒必須共用同一把鎖!

* 注:在實現的方式中,考慮同步的話,可以使用this來充當鎖。但是在繼承的方式中,

慎用this:

1 在一般的方法中 可以使用。

2 在靜態類的話當前類本身充當鎖。

原理如下

乙個執行緒搶到鎖之後 其他執行緒在當前執行緒結束之後才可以進入操作**塊的語句。

鎖可以由任意類物件充當~  如果使用this的話。

三個物件各自物件的鎖 還是會出現安全問題。

注意共同操作的資料 不能是區域性變數  所有執行緒必須共用同一把鎖(即  鎖要用static 修飾)

+ "售票,票號為:" + 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 ...