其他分享
首页 > 其他分享> > 线程安全的单例-懒汉

线程安全的单例-懒汉

作者:互联网

# 普通的单例

public class QQ {
    public static void main(String[] args) throws InterruptedException {

        final CountDownLatch latch = new CountDownLatch(10);

        for (int i = 0; i < 10; i++) {
            new Thread() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    MyClient.getInstance();
                    latch.countDown();
                }

            }.start();
        }

        latch.await();

        System.out.println(MyClient.count);
    }
}

class MyClient {

    private static MyClient client;

    public static int count;

    private MyClient() {
        count++;
    }

    public static MyClient getInstance() {
        if (client == null) {
            client = new MyClient();
        }
        return client;
    }
}

 

# 普通的线程安全的单例

public class QQ {
    public static void main(String[] args) throws InterruptedException {

        final CountDownLatch latch = new CountDownLatch(10);

        for (int i = 0; i < 10; i++) {
            new Thread() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    MyClient.getInstance();
                    latch.countDown();
                }

            }.start();
        }

        latch.await();

        System.out.println(MyClient.count);
    }
}

class MyClient {

    private static MyClient client;

    public static int count;

    private MyClient() {
        count++;
    }

    public synchronized static MyClient getInstance() {
        if (client == null) {
            client = new MyClient();
        }
        return client;
    }
}

 

# 双重校验的线程安全的单例

public class QQ {
    public static void main(String[] args) throws InterruptedException {

        final CountDownLatch latch = new CountDownLatch(10);

        for (int i = 0; i < 10; i++) {
            new Thread() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    MyClient.getInstance();
                    latch.countDown();
                }

            }.start();
        }

        latch.await();

        System.out.println(MyClient.count);
    }
}

class MyClient {

    private static MyClient client;

    public static int count;

    private MyClient() {
        count++;
    }

    public static MyClient getInstance() {
        if (client == null) {
            getSynInstance();
        }
        return client;
    }

    public synchronized static MyClient getSynInstance() {
        if (client == null) {
            client = new MyClient();
        }
        return client;
    }
}

 

标签:count,MyClient,public,client,线程,单例,new,static,懒汉
来源: https://www.cnblogs.com/lwmp/p/11278374.html