java设计模式_单例模式的补充说明_并发同步块

本文探讨了Java中单例模式的线程安全性问题,分析了不同实现方式下的线程安全特性,并详细解释了synchronized关键字在同步块和同步方法中的作用。
1 java的单例模式中之前的代码写的有问题,不是一定能保证线程安全的,如果有多个线程同时调用该类的得到实例方法就会导致单例不是线程安全的,
如:public static SingleClass getInstance(){
System.out.println("进入得到对象的方法中");
if(singleClass==null){
//线程安全 ,利用虚拟锁 ..将同步锁放在这里,不是安全。是如getInstanceNew方法是安全的
synchronized(unqielink){
System.out.println("进入虚拟锁的控制中");
singleClass=new SingleClass();
System.out.println(singleClass);
}
}
return singleClass;
}


2 这种方式是线程安全,他保证多线程进入后,先进性判断,如果为空则进入创建对象,如果不为空则跳过。
如:public static SingleClass getInstanceNew(){
synchronized(unqielink){//线程安全 ,利用虚拟锁
System.out.println("进入得到对象的方法中");
if(singleClass==null){
System.out.println("进入虚拟锁的控制中");
singleClass=new SingleClass();
System.out.println(singleClass);
}
}
return singleClass;
}


3 synchronized同步块的处理:java中如果遇到synchronized同步块,则每时每刻只有一个子线程能进入同步块中,而其余的没得到锁的子线程只能等待。而同步块之外的方法内容每个子线程都能通过进入方法。所以说synchronized同步块只能保证同步块中每时每刻只有一个子线程能访问,
如:public static SingleClass getInstanceNew(){
synchronized(unqielink){//线程安全 ,利用虚拟锁
System.out.println("进入得到对象的方法中");
if(singleClass==null){
System.out.println("进入虚拟锁的控制中");
singleClass=new SingleClass();
System.out.println(singleClass);
}
}
return singleClass;
}
4 在这里回顾下。synchronized同步方法的处理:java如果遇到synchronized的同步方法(锁的钥匙只有一个),则每时每刻只有一个子线程能访问该方法,其他子线程得不到钥匙的情况下只能等待。




!!!!!!!!综述:这里说明补充了下到单例模式的线程安全,和说明了synchronized的并发(同步块和同步方法)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值