tomcat的单例多线程代码示例(十)

一、懒汉式单例多线程模式

1、创建模拟的servlet生成器

package cn.bjsxt.sing;

import java.util.UUID;

public class LszySingleton {
    //servlet不建议使用成员变量
    // 给当前的servlet定义成员变量
    //    String uuid = null;
    static LszySingleton instance = null;

    // 构造器私有化就是不让通过构造器来不断构建对象
    /* public */private LszySingleton() {
        System.out.println("HungrySingleton.HungrySingleton()");
    }

    public static void init(){
        System.out.println("LazySingleton.init()");
    }
    
    public /*synchronized*/ void  service(){
        //每当线程调用service方法,都会重新生成uuid号
        String uuid = UUID.randomUUID().toString().replace("-", "");
        
        //显示当前线程所有携带的成员uuid
        System.out.println(Thread.currentThread().getName()+"---"+uuid);
        
    }
    // 对外提供专门的方法来获取对象(实例instance)
    //双重线程检验 doublecheck 
    public static/* synchronized */LszySingleton getInstance() {

        if (null == instance) {
            
            // 如果当前的对象实例为空,则创建该对象
            synchronized (LszySingleton.class) {
                if(null==instance){
                    instance = new LszySingleton();
                    init();
                }
            }
        }
        return instance;

    }

    
}

2、模拟tomcat服务器

package cn.bjsxt.sing;

public class tomcatrun implements Runnable {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        LszySingleton instance = LszySingleton.getInstance();
        instance.service();

    }
    
}

3、访问tomcat服务

public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {

            new Thread(new tomcatrun()).start();

        }
    }

二、饿汉式单例多线程

1、创建服务器

package cn.bjsxt.zs;

public class HungrySingleton {
    //饿汉式单例模式:
    static HungrySingleton instance=new HungrySingleton();
    private HungrySingleton(){
        System.out.println("HungrySingleton.HungrySingleton()"+"创建一个对象");
    }
    public static HungrySingleton getInstance(){
        return instance;
    } 
}

2、调用

package cn.bjsxt.zs;

public class Tomcat implements Runnable{
    public void run(){
        //Singleton.getInstance();
        HungrySingleton.getInstance();
        //System.out.println(LazySingleton.getInstance());
    }    
    public static void main(String[] args) {
        for (int i=0; i<5; i++) {
            new Thread(new Tomcat()).start();;
        }
    }
    
    
}
如果错过太阳时你流了泪,那你也要错过群星了。
在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
原文地址:https://www.cnblogs.com/szrs/p/12598489.html