单例饿汉模式:在调用获得对象的方法前就已经完成初始化
***********************
方式一:静态字段
class Single{
private static Single single=new Single();
private Single(){
}
public static Single getInstance(){
return single;
}
}
class Thread1 implements Runnable{
@Override
public void run() {
System.out.println(Single.getInstance());
}
}
public class SingleTest {
public static void main(String[] args){
ExecutorService executorService= Executors.newFixedThreadPool(5);
for(int i=0;i<5;i++){
Thread1 t=new Thread1();
executorService.submit(t);
}
}
}
********************
控制台输出:
singletest.Single@10302c31
singletest.Single@10302c31
singletest.Single@10302c31
singletest.Single@10302c31
singletest.Single@10302c31
**************************
方式二:静态语句块
class Single2{
private static Single2 single2;
private Single2(){
}
static {
single2=new Single2();
}
public static Single2 getInstance(){
return single2;
}
}
class Thread2 implements Runnable{
@Override
public void run() {
System.out.println(Single2.getInstance());
}
}
public class SingleTest2 {
public static void main(String[] args){
ExecutorService executorService=Executors.newFixedThreadPool(5);
for(int i=0;i<5;i++){
Thread2 t=new Thread2();
executorService.submit(t);
}
}
}
*********************
控制台输出:
singletest.Single2@60478b1f
singletest.Single2@60478b1f
singletest.Single2@60478b1f
singletest.Single2@60478b1f
singletest.Single2@60478b1f