单列和volatile关键字解析

参考文档

https://www.cnblogs.com/dolphin0520/p/3920373.html

单列设计:懒汉模式

  1. 饿汉式
	public void Lazy{
		private void lazy(){}
		private static Lazy lazy = new Lazy();
		public static Lazy getInstence(){
			return Lazy;
		} 
	}
  1. 经典懒汉设计
	public void Lazy{
		private void lazy(){}
		private static Lazy lazy;
		public static  Lazy getInstence(){
			if(lazy == null){
				lazy = new lazy();
			}
			return Lazy;
		} 
	}
  1. 线程安全懒汉式
public void Lazy{
	private volatile static Lazy lazy;
	private volatile static String my = false;
	private static  void lazy(){
		if(my){
			throw Exception;
		}
	}
	
	public static  LazygetInstence(){
		if(lazy == null){
			synchronized(Lazy.class){
				if(lazy == null){
					lazy = new lazy();
				}
			}
		}
		return Lazy;
	} 
}

其中存在不足,多线程时,无法保证只创建一个单列,由此引申加锁和volatile限制,来保证可见性和禁止进行指令重排序

  1. volatile无法保证对变量的任何操作都是原子性的。
  2. volatile能保证有序性
  3. volatile保证了不同线程对这个变量进行操作时的可见性

使用场景:

使用volatile必须具备以下2个条件:

1)对变量的写操作不依赖于当前值

2)该变量没有包含在具有其他变量的不变式中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值