今天逛博客困肩,發(fā)現(xiàn)原來單例的實現(xiàn)用枚舉類型是最提倡的。趕緊記錄到我的java學(xué)習(xí)筆記中棺蛛。_代碼很簡潔:
/**
* 這是就是我們要的Single
*/
public enum Single {
instanse;
int i;
public void someMethod(){
System.out.println("someMethod");
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
/**
* 這是調(diào)用示例
*/
public class Demo {
public static void main(String[] args){
Single s = Single.instanse;
s.setI(100);
System.out.println(s.getI());
s.someMethod();
}
}
此外下面是之前寫的代碼:
public class Single1 {
static UploadTaskQueue queue = null;
public static UploadTaskQueue getUploadTaskQueue() {
if(queue == null) {
queue = new UploadTaskQueue();
}
return queue;
}
}
最近才發(fā)現(xiàn)上面的代碼屬于線程不安全的藏畅。比如在queue還未被實例化之前同一時刻有兩個線程都執(zhí)行到if(queue == null)敷硅,那么這兩個線程都會去執(zhí)行queue = new UploadTaskQueue()。最后的結(jié)果是兩個線程得到的queue不是同一個愉阎。畢竟我這菜鳥寫的代碼沒有經(jīng)過太多的推敲O(∩_∩)O~绞蹦。解決方案可以看下這篇文章:
拋磚引玉