zoukankan      html  css  js  c++  java
  • 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();;
            }
        }
        
        
    }
    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    备忘录模式(java)
    06
    观察者模式(java)
    迭代器模式(c++)
    06
    07
    2021.11.21(迭代器模式c++)
    2021.11.24(状态模式java)
    2021.11.22(hive安装)
    2021.11.23(MYSQL安装)
  • 原文地址:https://www.cnblogs.com/szrs/p/12598489.html
Copyright © 2011-2022 走看看