以下是仔細檢查單例模式的實現。線程A正在執行行test=new Test();
但是就在同一時間,線程B首先檢查值test
。對於線程B,test
的值是多少?以單例模式創建對象時引用返回什麼
class Test {
private Test test;
private Test() {
}
public static Test get() {
if (test == null) { // Thread B. When object is being created,
// what's value of test. Is it always null before
// Thread B new object?
synchronized (test.getClass()) {
if (test == null) {
test = new Test(); // Thread A. This thread is creating object.
}
}
}
return test;
}
}
新增
如果它不是單例模式的一個正確的版本,可以volatile
關鍵字解決這個問題?即,private volatile Test test;
這必須是靜態的...:***公開測試的get(){***若不是沒有因爲你將需要一個Test類的實例,以便能夠調用get方法 –
@ΦXocę웃Пepeúpaツ對不起,我對它進行了修改。 – user7328234