单例问题与线程安全
餓漢式
沒有線程安全性問題
懶漢式
public class SingletonDemo2 {private static SingletonDemo2 instance;private SingletonDemo2() {}public static SingletonDemo2 getInstance() {if(instance==null) {instance=new SingletonDemo2();}return instance;}}如果遇到多線程。上面的代碼會返回不同的?SingletonDemo2 實例。違背了單例設計。
需要加上?synchronized 關鍵字。如下:
public synchronized static SingletonDemo2 getInstance() {if(instance==null) {instance=new SingletonDemo2();}return instance;}雖然解決了 “ 返回不同的? SingletonDemo2 實例”問題,但是在線程很多得時候,性能不好,因為synchronized 放在靜態方法上,內置鎖就是當前類的Class字節碼對象,當一些偏向鎖,輕量級鎖過來的時候,都會失去它們性能優勢,變成像 重量級鎖一樣。因而還不是最好的方法,需要改進。
最終版本:
總結
- 上一篇: pycharm 安装 jupyter
- 下一篇: 数据连接池druid 和 大数据框架dr