您的位置:首页 > 编程语言 > Java开发

java 并发类semaphore countdownlatch cyclicbarrier reentrantlock condition reentrantreadwritelock

2017-02-18 23:53 686 查看
semaphore

     它是基于计数的信号量,初始时设置阈值。在并发情况下,当前线程首先需要获取许可信号,如果在阈值内则可成功获取,否则阻塞等待;对于获取许可信息的线程,最后必须归还。

  代码如下:

             Semaphore semp = new Semaphore(5);
//设置阈值为5 

     

semp.acquire(); // 申请许可

      semp.release();
// 释放许可

CountDownLatch

     它是一个线程倒计数器,首先要设置计数的次数并且一旦设置无法更改。它允许一个或多个线程等待,直到其他线程操作结束(计数为0 时)才执行。

     代码如下:

     CountDownLatch countDownLatch = CountDownLatch(5);  // 倒计数为5

     countDownLatch.countDown(); // 减少一个计数

     countDownLatch.await();// 等待直到计数为0时才继续执行

CyclicBarrier 

    它指多个线程同时执行。首先需要设置一起执行的数量,然后等待直到所有人都到齐才执行。

    代码如下:

     CyclicBarrier c = new CyclicBarrier(2);
// 设置需要两个线程一起执行

     c.await();// 等待直到满足2个线程的要求,才断续执行。

Reentrantlock

  它是对synchronized的语义化方式改成对象的方法来实现同步机制。

 代码如下:

  Lock lock = new ReentrantLock(); // 实例锁对象

  lock.lock();   // 开启锁

  lock.unlock(); // 释放锁(必须操作)

condition

     Condition的功能类似于在传统的线程技术中的,Object.wait()和Object.notify()的功能,在等待Condition时,允许发生"虚假唤醒",这通常作为对基础平台语义的让步,对于大多数应  用程序,这带来的实际影响很小,因为Condition应该总是在一个循环中被等待,并测试正被等待的状态声明.某个实现可以随意移除可能的虚假唤醒,但是建议程序员总是假定这些虚  假唤醒可能发生,因此总是在一个循环中等待.

 Lock lock = new ReentrantLock();

 Condition condition = lock.newCondition();

 condition.await();

 condition.signal();

 lock.unlock();

reentrantreadwritelock

 读写锁

 对参照:https://my.oschina.net/adan1/blog/158107
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐