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();;
        }
    }
    
    
}
复制代码

 

posted @   慎终若始  阅读(342)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示