单例模式与多线程
單例模式
常見的饑餓模式和懶漢式模式
饑餓模式
直接實例化對象
懶漢式模式
在第一次調(diào)用方法的時候,進行實例化對象
多線程
這兩種模式,性能與線程安全上都是有問題的
一般使用雙重確認,或者靜態(tài)內(nèi)部類的方式
Dubble check instance
Static inner class
雙重確認
package com.bjsxt.base.conn011;public class DubbleSingleton {private static DubbleSingleton ds;public static DubbleSingleton getDs(){if(ds == null){try {//模擬初始化對象的準備時間...Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (DubbleSingleton.class) {if(ds == null){ds = new DubbleSingleton();}}}return ds;}public static void main(String[] args) {Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println(DubbleSingleton.getDs().hashCode());}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println(DubbleSingleton.getDs().hashCode());}},"t2");Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println(DubbleSingleton.getDs().hashCode());}},"t3");t1.start();t2.start();t3.start();}}運行
靜態(tài)內(nèi)部類
package com.bjsxt.base.conn011;public class Singletion {private static class InnerSingletion {private static Singletion single = new Singletion();}public static Singletion getInstance() {return InnerSingletion.single;}}總結(jié)
- 上一篇: ThreadLocal的使用
- 下一篇: 同步类容器