您的位置:首页 > 职场人生

【面试题】懒汉式的多线程安全问题解决方案

2013-10-19 14:45 489 查看
先判断空再判断锁
public class test3 {
public static void main(String[] args) {
Single single=Single.getInstance();
}

}
class Single{
private Single(){}
private static Single single=null;
public static  Single getInstance()
{
if(single==null)
{
synchronized (Single.class) {
if(single==null)
single=new Single();
}
}
return single;
}
}

用读写锁解决

package xiaozhijingtian;

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class test3 {
public static void main(String[] args) {
Single single=Single.getInstance();
}

}
class Single{
private Single(){}
private static Single single=null;
private static ReadWriteLock readWriteLock=new ReentrantReadWriteLock();
public static  Single getInstance()
{
readWriteLock.readLock().lock();
if(single==null)
{
readWriteLock.readLock().unlock();
readWriteLock.writeLock().lock();
if(single==null)
single=new Single();
readWriteLock.writeLock().unlock();
readWriteLock.readLock().lock();
}
readWriteLock.readLock().unlock();
return single;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: