Java多线程_单例模式与多线程

立即加载|饿汉模式

在这里插入图片描述

package multiply.com.test;
public class Run {
    
    
    public static void main(String[] args) {
    
    
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        MyThread t3 = new MyThread();
        t1.start();
        t2.start();
        t3.start();
    }
}
package multiply.com.test;
public class MyThread extends Thread {
    
    
    @Override
    public void run() {
    
    
        super.run();
        System.out.println(MyObject.getInstance().hashCode());
    }
}
package multiply.com.test;
public class MyObject {
    
    
    private static MyObject object = new MyObject();
    public static MyObject getInstance() {
    
    
        return object;
    }
}

1213024637
1213024637
1213024637
在这里插入图片描述

延迟加载|懒汉模式

在这里插入图片描述

package multiply.com.test;
public class MyObject {
    
    
    private static MyObject object;
    private MyObject()
    {
    
    
    }
    public static MyObject getInstance() {
    
    
        if (null == object) {
    
    
            try {
    
    
                Thread.sleep(2000);
                object = new MyObject();
            } catch (InterruptedException e) {
    
    
                e.printStackTrace();
            }
        }
        return object;
    }
}
package multiply.com.test;
public class MyThread extends Thread {
    
    
    @Override
    public void run() {
    
    
        super.run();
        System.out.println(MyObject.getInstance().hashCode());
    }
}
package multiply.com.test;
public class Run {
    
    
    public static void main(String[] args) {
    
    
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        MyThread t3 = new MyThread();
        t1.start();
        t2.start();
        t3.start();
    }
}

106990145
355386388
1213024637
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package multiply.com.test;
public class Run {
    
    
    public static void main(String[] args) {
    
    
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        MyThread t3 = new MyThread();
        t1.start();
        t2.start();
        t3.start();
    }
}
package multiply.com.test;
public class MyThread extends Thread {
    
    
    @Override
    public void run() {
    
    
        super.run();
        System.out.println(MyObject.getInstance().hashCode());
    }
}
package multiply.com.test;
public class MyObject {
    
    
    private static volatile MyObject object;
    public static MyObject getInstance() {
    
    
        if (null == object) {
    
    
            try {
    
    
                Thread.sleep(2000);
            } catch (InterruptedException e) {
    
    
                e.printStackTrace();
            }
            synchronized (MyObject.class) {
    
    
                if (null == object) {
    
    
                    object = new MyObject();
                }
            }
        }
        return object;
    }
}

2042504460
2042504460
2042504460
在这里插入图片描述

使用静态内置类实现单例模式

package multiply.com.test;
public class Run {
    
    
    public static void main(String[] args) {
    
    
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        MyThread t3 = new MyThread();
        t1.start();
        t2.start();
        t3.start();
    }
}
package multiply.com.test;
public class MyThread extends Thread {
    
    
    @Override
    public void run() {
    
    
        super.run();
        System.out.println(MyObject.getInstance().hashCode());
    }
}
package multiply.com.test;
public class MyObject {
    
    
    private static class MyObjectHandler {
    
    
        private static MyObject object = new MyObject();
    }
    public static MyObject getInstance() {
    
    
        return MyObjectHandler.object;
    }
}

1282593964
1282593964
1282593964

序列化与反序列化的单例模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用static代码块实现单例模式

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42148307/article/details/121101150