ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播 >> JAVA并发编程--Semaphore、CountDownLatch、ReentrantLock、CyclicBarrier

JAVA并发编程--Semaphore、CountDownLatch、ReentrantLock、CyclicBarrier(1/3)

来源:网络整理     时间:2016-05-16     关键词:

本篇文章主要介绍了"JAVA并发编程--Semaphore、CountDownLatch、ReentrantLock、CyclicBarrier",主要涉及到方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: Semaphore学习操作系统理论课的时候,教材上应该都会讲过信号量这种概念,java.util.concurrent.Semaphore类就是Java中这个概...

Semaphore

学习操作系统理论课的时候,教材上应该都会讲过信号量这种概念,java.util.concurrent.Semaphore类就是Java中这个概念的实现。比如资源R有5个实体,如果每个线程执行的过程中需要用到1个,那么允许5个线程并发执行,第6个会等待其他线程释放资源后继续执行。

Semaphore实际上就是把锁的限制从1变为N

  • state存储的是表示剩余可用资源的值
  • Node采用的是SHARED模式
  • 获得锁之后会尝试传播,释放更多锁

先看一个应用Semaphore的例子:
其中最主要的方法就是acquire()和release(),更详细的可以参看Oracle的API文档。

ExecutorService exec = Executors.newCachedThreadPool();
final Semaphore sem = new Semaphore(5);

for (int i = 1; i < 100; i++) {
    finalint tid = i;
    Runnable semTask = new Runnable() {
        publicvoidrun() {
            try {
                sem.acquire();

                System.out.println("running thread with id: " + tid);
                Thread.sleep((long) (Math.random() * 3000));
                System.out.println("completing with id: " + tid);

                sem.release();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    exec.execute(semTask);
}
exec.shutdown();

CountDownLatch

java.util.concurrent.CountDownLatch这个类从名字就可以看出,是以一个递减计数器为基础,多个线程共享这样一个对象,开启一个计数值,某些线程可以等待这个计数器值为0的时候继续任务,调用await(),而那些改变状态的线程需要做的就是使计数器递减,调用countDown()方法。

相关图片

相关文章