java多线程中的设计模式

在本文开始介绍多线程中的设计模式


1.Single Threaded Execution Pattern

同一时刻只允许一个线程操作


可以理解为串行操作 

总结在多线程要访问的方法上加上synchronized关键字


2.Immutable Pattern

变量赋值一次后只能读取,不能改变

比喻  一夫多妻

总结 将多线程共享的变量用finnal 修饰


3.Guarded Suspension Pattern

要等我准备好,没准备好你等,好了叫你

总结:判断某个条件是否为真,如果条件成立则继续执行一步,如果条件不成立用wait()方法挂起当前线程,

条件为真后由另一个线程用notify()或 着notifyAll()方法唤醒挂起的线程。


4.Balking Pattern
   [有人在做了?哈哈,太好了,我就不过去了!]

总结:设置一个volatile的共享变量,多个线程进入同一方法时,判断变量的值是否为真,

如果为真说明有人已经在做这个工作了,线程返回,反之将变量赋值为真并执行。


5.Producer-Consumer Pattern
   [生产-消费者,你生产蛋榚我来吃。]

总结:<1>生产者将生产出来的东西add(E e)到一个Queue,然后唤醒正在从Queue等东西的线程,用poll()方法从队列的头获取到东西,当Queue里的东西被取完,取东西的线程再次被挂起。
           <2>生产者将生产出来的东西放入(方法很多,有add(E e)、addFirst(E e)、addLast(E e)等)一个Deque,然后唤醒正在从Queue等东西的线程,线程从Deque的头和尾取东西,当Deque里的东西被取完,取东西的线程再次被挂起。

6.Read-Write Lock Pattern
   [学生抄的时候,不允许老师擦掉黑板上的字。]

  总结:Jdk1.5及以上有专门的读写锁实现
        java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
       java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
7.Thread-Per-Message Pattern  
   [一任务一线程]

   总结:一个客人一个妞服务,好是好,可是天朝扫黄太厉害,现在狼多肉少哇,用线程池吧,轮流服务。

9.Future Pattern
   [给您一张提货单,下午来取。]

   比喻:
       李刚:大钞票一摔,来只大蛋榚!
       店员:对不起没这么大的,但现做,给您张单子,下午xx点来取。
       李刚:取货单??,上面都写了些啥?
            订单号:SB01
             客户名:李刚
             已付款:250
          取货时间:PM2:50
   
   总结:调用某个方法时,这个方法可能需要请求其它系统,这个过程比较耗时,为了提高客户的体验需要方法立即返回,过一段时间再查询结果。
          在程序里声明一个Hashmap,Key保存订单号,Value保存生产出的蛋榚,然后根据订单号取得对应的蛋榚。

10.Two-Phase Termination Pattern
   [玩具收拾好,睡觉去]
   比喻:小孩子在玩具,到点了妈妈喊:别玩了,睡觉去!
   总结:一个线程在while(!isInterrupted()){..}循环中执行,另外一个线程判断某个条件达到后获得准备被结束线程的句柄,调用interrupt()
        设置线程的中断状态。
11.Thread-Specific Storage Pattern
   [线程私有物品保管箱]
    总结:一个方法可能会被同一个线程访问多次,如果每访问一次就要声明一个数据库连接的Connection变量,则对程序的性能有影响。将Connection放在ThreadLocal里,这样每次访问就不必再产生一个Connection,同一个线程对应同一个Connection.

12.Active Object[]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值