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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值