今天学习了有关线程方面的知识,觉得有必要记录一下以巩固自己的技术栈。
在单线程中,单例模式可由饿汉和懒汉两种方式实现。但在多线程中,基于性能和安全方面的考虑,可使用以下两种模式来实现。
1.static inner class
实现的代码如下:
public class InternalSingleton {
private static class Singleton{
private static Singleton single = new Singleton();
}
public static Singleton getSingleton(){
return Singleton.single;
}
}
2.dubble check instance
实现的代码如下:
public class DubbleSingleton {
private static DubbleSingleton singleton;
public static DubbleSingleton getSignleton(){
synchronized(DubbleSingleton.class){
if (singleton == null) {
singleton = new DubbleSingleton();
}
}
return singleton;
}
public static void main(String[] args) {
new Thread(new Runnable(){
public void run(){
System.out.println(DubbleSingleton.getSignleton().hashCode());
}
},"thread1").start();
new Thread(new Runnable(){
public void run(){
System.out.println(DubbleSingleton.getSignleton().hashCode());
}
},"thread2").start();
}
}