Singleton模式(一) - 简单多线程计数器

简介: 1. 经典的设计模式中的代码public class Singleton    {        private static Singleton instance;   // 唯一实例        protected Singleton() { }   // 封闭客户程序的直接实例...

1. 经典的设计模式中的代码

public  class Singleton
    {
         private  static Singleton instance;    //  唯一实例
         protected Singleton() { }    //  封闭客户程序的直接实例化

         public  static Singleton Instance    
        {
             get
            {
                 if (instance ==  null)
                    instance =  new Singleton();
                 return instance;
            }
        }
    }

  在多线程环境下存在缺陷, 最终将会保存最后创建的那个实例

 

2. 改进后的多线程Singleton

class Singleton
    {
         private Singleton() { }
        [ThreadStatic]
         public  static  readonly Singleton Instance =  new Singleton();
    }

 

3. 线程计数器

public  class ThreadCounter
    {
         private ThreadCounter() { }
         public  static  readonly ThreadCounter Instance =  new ThreadCounter();

         private  int value;
         public  int Next {  get {  return ++value; } }
         public  void Reset() { value =  0; }
    }

 

4. 调用代码

  ThreadCounter.Instance.Next

 

 

目录
相关文章
|
7月前
|
存储 缓存 Java
9.队列:生产消费模式及线程池的运用
9.队列:生产消费模式及线程池的运用
61 0
|
6月前
|
安全 Java
线程安全的单例模式(Singleton)
线程安全的单例模式(Singleton)
|
4月前
|
设计模式 安全 Java
|
4月前
|
NoSQL Redis
Lettuce的特性和内部实现问题之在同步调用模式下,业务线程是如何拿到结果数据的
Lettuce的特性和内部实现问题之在同步调用模式下,业务线程是如何拿到结果数据的
|
4月前
|
NoSQL 关系型数据库 MySQL
简述redis的单线程模式
简述redis的单线程模式
|
5月前
|
Prometheus 监控 数据可视化
通用快照方案问题之Hystrix进行指标监控如何解决
通用快照方案问题之Hystrix进行指标监控如何解决
46 0
|
6月前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
68 2
|
5月前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
72 0
|
5月前
|
存储 设计模式 监控
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
52 0
|
5月前
|
安全 算法 Java
Java面试题:如何诊断和解决Java应用程序中的内存泄漏问题?如何实现一个线程安全的计数器?如何合理配置线程池以应对不同的业务场景?
Java面试题:如何诊断和解决Java应用程序中的内存泄漏问题?如何实现一个线程安全的计数器?如何合理配置线程池以应对不同的业务场景?
38 0