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();; } } }
如果错过太阳时你流了泪,那你也要错过群星了。
在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通