單例模式是否執行緒安全

2021-09-01 17:18:18 字數 2139 閱讀 3235

今天領導問了個問題說單例模式中,物件的變數是否是執行緒安全的。起初都不太確定,後來本著裝的目的,試了一下,結果是否定的。在多執行緒環境下,物件的成員變數是不安全的。

package com.zhuyang.test;

public class singleton

public static synchronized singleton getinstance()

public int getcount()

public void setcount(int count)

}

上面的**是一段標準的單例模式。 其中有個成員變數count.他的值,會再多執行緒環境下不斷修改。

package com.zhuyang.test;

public class test

}class threadtest extends thread

@override

public void run()

public int getthreadid()

public void setthreadid(int threadid)

}

執行上面的**結果:

thread-0is updating count value is=1111, count value of singleton is=4444

thread-4is updating count value is=5555, count value of singleton is=4444

thread-5is updating count value is=6666, count value of singleton is=4444

thread-2is updating count value is=3333, count value of singleton is=4444

thread-6is updating count value is=7777, count value of singleton is=4444

thread-3is updating count value is=4444, count value of singleton is=4444

thread-1is updating count value is=2222, count value of singleton is=4444

說明,多執行緒中,單例模式並非執行緒安全,即便是加上了synchronized關鍵字。

那麼如何做到執行緒安全呢?做法就是把物件給synchronized掉,看**。

package com.zhuyang.test;

public class test

}class threadtest extends thread

@override

public void run()

}public int getthreadid()

public void setthreadid(int threadid)

}

結果:thread-0is updating count value is=1111, count value of singleton is=1111

thread-1is updating count value is=2222, count value of singleton is=2222

thread-2is updating count value is=3333, count value of singleton is=3333

thread-3is updating count value is=4444, count value of singleton is=4444

thread-4is updating count value is=5555, count value of singleton is=5555

thread-6is updating count value is=7777, count value of singleton is=7777

thread-5is updating count value is=6666, count value of singleton is=6666

c 多執行緒單例模式 執行緒安全C 單例模式

我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...

設計模式 單例模式(執行緒安全)

前言 單例模式是設計模式中比較簡單的一種,但是又因為簡單常見在面試中又是經常出現的乙個設計模式。所以必須要會啊。之前也只是會寫執行緒不安全的單例模式。單例模式 乙個類能返回物件乙個引用 永遠是同乙個 和乙個獲得該例項的方法 必須是靜態方法,通常使用getinstance這個名稱 當我們呼叫這個方法時...

執行緒安全的單例模式

廢話不多說,常用的 積澱下來。一 懶漢模式 即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。需要用鎖,來保證其執行緒安全性 原因 多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.使用double check來保證thread safe...