0
点赞
收藏
分享

微信扫一扫

java并发访问的几个工具类的简单说明

Ad大成 2023-03-27 阅读 90

package com.endual;

 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BrokenBarrierException;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.CyclicBarrier;
 import java.util.concurrent.Exchanger;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;

 public class SemaphoneMain {

     //semaphone可以维护当前访问自身的线程的个数,并且提供了同步机制。
      //使用semaphone可以控制同时访问资源的线程个数。例如,实现一个文件的并发访问数。
     //semaphore 实现的功能就类似测试的五个坑,例如有十个人要上测试,那么同时有多少
     //个人要上厕所呢?只能同时有5个人来占用,当5个人用用后,空出来的,就有人再进去用
     Semaphore sp = new Semaphore(3) ;
     private int parties = 1;
     //表示大家彼此等待,大家集合号才开始出发,分散活动后又在指定地点碰面,这就好比整个公司的
     //的人员利用周末时间集体郊游一样,先各自从自家出发到公司后,在同时出发到公园游玩,
     //再指定地点集合好以后再同时开始就餐
     CyclicBarrier cb = new CyclicBarrier(parties ) ; //同步工具类
     private int count = 20 ;
     
     //犹如倒计时器,调用这个多谢的countdown方法就将计时器减去一,当计时器为0是做所有等待的线程
     //就立马自己开始运行
     CountDownLatch cdlx = new CountDownLatch(count ) ;
     //用于两个人之间实现的数据交换,每个人在完成一定的事物以后就想着和对方交换数据
     //第一个人先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据
     Exchanger exch = new Exchanger() ;
     public void testAyclicBarrier() throws Exception, BrokenBarrierException {
         CountDownLatch cdlx = new CountDownLatch(count ) ;
         cb.await() ;
         cb.getNumberWaiting() ;
         cb.isBroken() ;
         
         cdlx.countDown() ; //减去一
         cdlx.getCount() ;
         cdlx.await() ;//当家都等待着
         
         exch.wait() ;
         Object x = null;
         exch.exchange(x) ; //该线程和object进行数据交换 ??
         TimeUnit unit = null;
         long timeout;
         //exch.exchange(x, timeout, unit) ;
         
         int capacity = 1;
         //可阻塞队列用来同步
         ArrayBlockingQueue<String> abkq = new ArrayBlockingQueue<String>(capacity);
         String e = "name";
         abkq.add(e ) ;
         abkq.put(e) ;
         
         
         
     }
     
     
     public void main() {
         
         try {
             sp.acquire() ;
         //    sp.isFair() = true ;
         //    sp.isFair() = false ;
         } catch (InterruptedException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         sp.release() ;
         
     }
     
 }

举报

相关推荐

0 条评论