操作系统到多线程高并发2

CountDownLatch(倒数门闩);等待线程结束后执行减一操作
latch.countDown():线程执行完结束之后,数量减一.但是这是动态操作,可以减的不是1,可以调用多次
latch.await():当latch.countDown()减少到0的时候继续向下执行
 
CyclicBarrier(计数栅栏):
 
parties:等待数到达20
new Runnable:数量到达20后执行的内容
barrier.await():每一个线程都执行完,parties加1,等待parties的数到达20,执行new Runnable中的方法
*举例:不同线程执行不同操作,A执行数据库,B执行网络,C执行IO操作,ABC都执行完了之后才执行await后面的操作
 
Phaser(阶段):按照不同阶段执行,每一个阶段都会等待上一个阶段所有线程都执行完
public  class  MyPhaser  extends  Phaser {
     @Override
     protected  boolean  onAdvance( int  phase,  int  registeredParties) {  //在每个阶段执行完成后回调的方法
 
         switch  (phase) {
             case  0 :
                 return  第1阶段(); //全部阶段未完成,当前阶段完成 返回false
             case  1 :
                 return 第2阶段 (); //全部阶段未完成,当前阶段完成 返回false
             case  2 :
                 return 第3阶段 (); //全部阶段未完成,当前阶段完成 返回false
             default :
                 return  true ; //全部阶段完成 返回true
         }
 
     }
 
   private  boolean  第1阶段 (){
         System.out.println( " 全部阶段未完成,当前阶段完成 返回false " );
         return  false ;
     }
 
     private  boolean  第2阶段 (){
         System.out.println( " 全部阶段未完成,当前阶段完成 返回false " );
         return  false ;
     }
 
     private  boolean  所有阶段完成 (){
         System.out.println( "所有阶段完成" );
         return  true ;
     }
 
*举例:遗传算法
 
ReadWriteLock(读写锁):共享锁(读锁)和排他锁(写锁)
加了读锁之后,只允许读线程并发进入读
加了写锁之后,写线程按照正常lock写
 
 
Semaphore(信号量):
permits:信号灯数量
s.acquire()(取得):阻塞方法,执行之后permits减1并得到锁,如果permits为0,下一个线程来了之后发现是0就等待拿到锁的释放锁
s.release();执行完操作之后释放信号灯数量为1
*信号灯的数量不定,做限流用.表示最多几个线程可以同时执行
 
Exchanger(交换器):用于线程之间交换数据
双线程中,一个线程执行exchanger.exchange方法会进入阻塞,等待第二个线程exchanger.exchange,都到位了之后就交换,只能两个线程交换数据
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值