Java高并发程序-Chapter4 并行模式与算法(第二十三讲)单利模式

1.饿汉模式

package com.john.learn.high.concurent.ch04.singleton;

public class StarvationSingleton {

	public StarvationSingleton() {

		System.out.println("Starvation Singleton is created...");
	}

	public static StarvationSingleton getInstance() {
		return instance;
	}

	private static StarvationSingleton instance = new StarvationSingleton();

}

2. 懒汉模式

package com.john.learn.high.concurent.ch04.singleton;

public class LazySingleton {

  public LazySingleton() {

    System.out.println("LazySingleton Singleton is created...");
  }


  public static LazySingleton getInstance() {


    if (instance != null) {

     return instance;
    }


    synchronized (LazySingleton.class) {

     if (instance == null) {


       instance = new LazySingleton();
     }

    }

    return instance;

  }


  private static LazySingleton instance;


}
 

3. 优化单利模式1

package com.john.learn.high.concurent.ch04.singleton;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FreeLazySingleton {

	public FreeLazySingleton() {

		System.out.println("FreeLazySingleton is created...");
	}

	public static synchronized FreeLazySingleton getInstance() {

		return FreeLazySingletonHolder.getInstance();
	}

	private static class FreeLazySingletonHolder {

		private static FreeLazySingleton instance = new FreeLazySingleton();

		public static FreeLazySingleton getInstance() {
			return instance;
		}
	}

	private static FreeLazySingleton instance;

	public static void main(String[] args) {

		ExecutorService executorService = Executors.newCachedThreadPool();

		for (int i = 0; i < 10; i++) {

			executorService.submit(new Runnable() {

				@Override
				public void run() {

					FreeLazySingleton.getInstance();

				}
			});
		}

		executorService.shutdown();
	}

}

4. 优化单利模式2 (CAS)

package com.john.learn.high.concurent.ch04.singleton;


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;


public class FreeLockSingleton {


	public FreeLockSingleton() {


		System.out.println("FreeLockSingleton is created...");
	}


	public static FreeLockSingleton getInstance() {


		if (instance != null) {


			return instance;
		}


		for (;;) {


			if (createInstanceCertificate.compareAndSet(false, true)) {


				instance = new FreeLockSingleton();


			}


			if (instance != null) {


				return instance;
			}


		}
	}
	
	


	private static FreeLockSingleton instance = null;


	private static AtomicBoolean createInstanceCertificate = new AtomicBoolean();


	public static void main(String[] args) {


		ExecutorService executorService = Executors.newCachedThreadPool();


		for (int i = 0; i < 10; i++) {


			executorService.submit(new Runnable() {


				@Override
				public void run() {


					FreeLockSingleton.getInstance();


				}
			});
		}


		executorService.shutdown();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值