package com.thinkgem.jeesite.test;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
*/
public class SingletonTest {
// 饿汉式
/*
private static SingletonTest instance = new SingletonTest();
private SingletonTest(){
}
public static SingletonTest getInstance(){
return instance;
}
*/
// 懒汉式,并发问题
/*
private static SingletonTest instance= null;
private SingletonTest(){
}
public static SingletonTest getInstance(){
if(instance == null){
instance = new SingletonTest();
}
return instance;
}
*/
// 懒汉式,解决并发问题,双重检查加锁
/*private static SingletonTest instance= null;
private SingletonTest(){
}
public static SingletonTest getInstance(){
if(instance == null){
synchronized (SingletonTest.class){
if(instance == null){
instance = new SingletonTest();
}
}
}
return instance;
}
*/
// 懒汉式,解决指令集重排序问题
/*
private static volatile SingletonTest instance= null;
private SingletonTest(){
}
public static SingletonTest getInstance(){
if(instance == null){
synchronized (SingletonTest.class){
if(instance == null){
instance = new SingletonTest();
}
}
}
return instance;
}
*/
public static class singletonHoder{
private static SingletonTest singleton = new SingletonTest();
}
private static final CountDownLatch countDownLatch = new CountDownLatch(1000);
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
countDownLatch.countDown();
try {
countDownLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//SingletonTest instance2 = SingletonTest.getInstance();
SingletonTest singleton = singletonHoder.singleton;
System.out.println(singleton);
}
}).start();;
}
}
}