zoukankan      html  css  js  c++  java
  • 线程池的设计思想及观察者模式

    单例模式之懒汉式

    饿汉式在多线程的情况小可能会出现多实例的情况

    解决1;加锁

     

    解决2:双层判断方式,减少枷锁的次数doubleCheck

     3.保证程序的有序性,禁止程序内部优化,从而保证不会出现空指针异常

     

    4.利用jvm只产生一份static,并且是主动加载,实现单例懒汉式

     

     使用枚举模式

     volatile的讲解

     cpu的每个cache都存放一份指令,目的是提高执行效率,但是这样的话,每个线程执行得到的数据如果,线程的数据没有被进行写的操作,是不会到主线程去读取数据,这就会出现缓存数据错误的问题

    解决cpu分布式缓存的方案:保证数据一致性

     第二种的效率比较高,

     并发编程需要保证三个条件

    1:程序保证原子性

    2、可见性(各个线程的数据要保证共享数据的一致)

     3、顺序性(jvm在执行程序的时候,会对程序进行重排序,但是会保证最终一致性。这对于单线程是没有问题的,但是在多线程的时候,有可能会出现空指针异常:比如说一个对象还没有创建,另外一个线程就对他进行了调用)

     比如上面这个程序,一个线程已经创建了对象,但是还没有初始化,下一个线程判断对象已经创建了,就直接调用,就会出现空指针异常

    java中如何保证上面三个条件

     

     

     

     

     观察者模式

     观察者模式的主要组成:subect,observer,observerClient,observerd订阅subject,只有subject发生了变化才会通知oberver

    使用观察者模式设计查询,观察多线程的运行转态

     在observer中,每个id开启一个线程去查询线程的状态

     

     

     

     

     

     threadcycle类是针对具体的业务,对她进行观察,observerrunable类抽取出了对监听地获取,监听转态的类型,对监听的通知的高度抽象功能,监听器,也相当于一个过滤器,可以将重复的代码都写在监听器中,从而减少工作量

    多线程的观察者设计模式总结:

    ObserverRunable的功能是是将获取到的变化信息返回出去

    observer是具体的业务,

    在调用observer的业务方法的时候,通过ObserverRunable的方法,将变化的信息通知出去

  • 相关阅读:
    多态中的虚析构函数
    mysql-2-where
    mysql-1-select
    高维稀疏数据的异常检测
    隐马尔可夫模型 Hidden Markov Model
    协同过滤 Collaborative Filtering
    内容推荐
    推荐系统中的基本问题
    HDR视频生态圈追踪
    从强提醒说起——社交场景下的万有“隐力”
  • 原文地址:https://www.cnblogs.com/zj-xu/p/11863527.html
Copyright © 2011-2022 走看看