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

1、创建模拟的servlet生成器

  1. package cn.bjsxt.sing;
  2.  
  3. import java.util.UUID;
  4.  
  5. public class LszySingleton {
  6. //servlet不建议使用成员变量
  7. // 给当前的servlet定义成员变量
  8. // String uuid = null;
  9. static LszySingleton instance = null;
  10.  
  11. // 构造器私有化就是不让通过构造器来不断构建对象
  12. /* public */private LszySingleton() {
  13. System.out.println("HungrySingleton.HungrySingleton()");
  14. }
  15.  
  16. public static void init(){
  17. System.out.println("LazySingleton.init()");
  18. }
  19.  
  20. public /*synchronized*/ void service(){
  21. //每当线程调用service方法,都会重新生成uuid号
  22. String uuid = UUID.randomUUID().toString().replace("-", "");
  23.  
  24. //显示当前线程所有携带的成员uuid
  25. System.out.println(Thread.currentThread().getName()+"---"+uuid);
  26.  
  27. }
  28. // 对外提供专门的方法来获取对象(实例instance)
  29. //双重线程检验 doublecheck
  30. public static/* synchronized */LszySingleton getInstance() {
  31.  
  32. if (null == instance) {
  33.  
  34. // 如果当前的对象实例为空,则创建该对象
  35. synchronized (LszySingleton.class) {
  36. if(null==instance){
  37. instance = new LszySingleton();
  38. init();
  39. }
  40. }
  41. }
  42. return instance;
  43.  
  44. }
  45.  
  46. }

2、模拟tomcat服务器

  1. package cn.bjsxt.sing;
  2.  
  3. public class tomcatrun implements Runnable {
  4.  
  5. @Override
  6. public void run() {
  7. // TODO Auto-generated method stub
  8. LszySingleton instance = LszySingleton.getInstance();
  9. instance.service();
  10.  
  11. }
  12.  
  13. }

3、访问tomcat服务

  1. public static void main(String[] args) {
  2. for (int i = 0; i < 5; i++) {
  3.  
  4. new Thread(new tomcatrun()).start();
  5.  
  6. }
  7. }

二、饿汉式单例多线程

1、创建服务器

  1. package cn.bjsxt.zs;
  2.  
  3. public class HungrySingleton {
  4. //饿汉式单例模式:
  5. static HungrySingleton instance=new HungrySingleton();
  6. private HungrySingleton(){
  7. System.out.println("HungrySingleton.HungrySingleton()"+"创建一个对象");
  8. }
  9. public static HungrySingleton getInstance(){
  10. return instance;
  11. }
  12. }

2、调用

  1. package cn.bjsxt.zs;
  2.  
  3. public class Tomcat implements Runnable{
  4. public void run(){
  5. //Singleton.getInstance();
  6. HungrySingleton.getInstance();
  7. //System.out.println(LazySingleton.getInstance());
  8. }
  9. public static void main(String[] args) {
  10. for (int i=0; i<5; i++) {
  11. new Thread(new Tomcat()).start();;
  12. }
  13. }
  14.  
  15. }

tomcat的单例多线程代码示例(十)的更多相关文章

  1. Servlet 单例多线程【转】

    源地址:Servlet 单例多线程 Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的时候(或客户端发送请求到服务器时),Ser ...

  2. Servlet 单例多线程详解(六)

    一.Servlet 单例多线程 Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  3. Servlet 单例多线程

    Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在 ...

  4. servlet单例多线程

    Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在 ...

  5. [转]Servlet 单例多线程

    Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在 ...

  6. 单例&多线程

    单例模式,最常见的就是饥饿模式,和懒汉模式,一个直接实例化对象,一个在调用方法时进行实例化对象.在多线程模式中,考虑到性能和线程安全问题,我们一般选择下面两种比较经典的单例模式,在性能提高的同时,又保 ...

  7. C#多线程代码示例

    using System; using System.Threading; namespace MultiThreadDemo { class Program { public static void ...

  8. 单例设计模式代码-bxy

    struct ConnectInfo { const QObject *sender; //发送者 const char *signal_str; //发送信号 const QObject *reci ...

  9. Java多线程代码示例

    package algorithm; class Mythread extends Thread{ String name; public Mythread(String name){ this.na ...

随机推荐

  1. 使用 Apache Superset 可视化 ClickHouse 数据

    Apache Superset是一个强大的BI工具,它提供了查看和探索数据的方法.它在 ClickHouse 用户中也越来越受欢迎. 我们将介绍安装 Superset 的 2 种方法,然后展示如何从 ...

  2. 腾讯TencentOS 十年云原生的迭代演进之路

    导语 TencentOS Server (又名 Tencent Linux 简称 Tlinux) 是腾讯针对云的场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用 ...

  3. laya fgui 超简单的UI框架

    FairyGUI 超简单的UI框架 Laya使用fgui的超简单UI框架 使用场景:用于使用fgui进行layaUI开发的程序人员 整个框架分为3个模块,共有4个类: FGUIManager :FGU ...

  4. 【复习】Listening and Reading Comprehension

    短对话 M: Why do you declare the news that you're pregnant on your blog directly? W: I'm so excited tha ...

  5. VBS脚本编程(10)——编写WMI脚本

    WMI介绍 1.WMI是什么? WMI--Windows管理规范(Windows Management instrumentation). 是一项核心的Windows管理技术. 采用统一的.基于开放标 ...

  6. Linux常见信号介绍

    1.信号 首先信号我们要和信号量区分开来,虽然两者都是操作系统进程通信的方式.可以简单的理解,信号是用来通知进程发生了什么需要做什么,信号量一般是用作进程同步(pv操作) 2.常见信号量 (以下数字标 ...

  7. 技术实践:教你用Python搭建gRPC服务

    摘要:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开发,且支持众多开发语言. 本文分享自华为云社区& ...

  8. PL/SQL插入数据报错:Access violation at address 00413A81 in module 'plsqldev.exe'. Read of address 00000000

    前言 今天同事在使用plsql给oracl数据库插入记录时报错:Access violation at address 00413A81 in module 'plsqldev.exe'. Read ...

  9. 快速简单的了解VLAN(VXLAN)和端口链路类型

    目录 前言 一.VLAN是什么? 1.优点 2.为什么推出VXLAN 二.VXLAN又是什么? 1.优点 三.创建VLAN 四.介绍端口链路类型 五.Access 1.特性 六.Trunk 1.特性 ...

  10. 富文本编辑器之游戏角色升级ing

    一.前言 想必大家看到这个标题,心中不禁会浮现几个问题: 什么是富文本编辑器? 富文本编辑器和游戏角色有什么关系? 为什么是升级ing? 什么是富文本编辑器--富文本编辑器集成了格式设置.媒体嵌入.社 ...