CyclicBarrier的用法

  CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,香港服务器,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。

  CyclicBarrier类似于CountDownLatch也是个计数器, 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数, 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。 CyclicBarrier就象它名字的意思一样,可看成是个障碍,香港虚拟主机, 所有的线程必须到齐后才能一起通过这个障碍。 CyclicBarrier初始时还可带一个Runnable的参数,此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。

构造方法摘要

(int parties) 创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,但它不会在每个 barrier 上执行预定义的操作。

(int parties, Runnable barrierAction) 创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入 barrier 的线程执行

方法摘要

int() 在所有都已经在此 barrier 上调用 await 方法之前,将一直等待。

int(long timeout, TimeUnit unit) 在所有都已经在此屏障上调用 await 方法之前,将一直等待。

int() 返回当前在屏障处等待的参与者数目。

int() 返回要求启动此 barrier 的参与者数目。

boolean() 查询此屏障是否处于损坏状态。

void() 将屏障重置为其初始状态。

1 package com.thread; 2 import java.util.concurrent.CyclicBarrier; 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 import java.util.concurrent.Semaphore; CyclicBarrierTest { main(String[] args) {10ExecutorService service = Executors.newCachedThreadPool();(int i=0;i<3;i++){13Runnable runnable = new Runnable(){ run(){15try {16Thread.sleep((long)(Math.random()*10000));17System.out.println(“线程” + Thread.currentThread().getName() + 18″即将到达集合地点1,当前已有” + cb.getNumberWaiting() + “个已经到达,正在等候”);Thread.sleep((long)(Math.random()*10000));22System.out.println(“线程” + Thread.currentThread().getName() + 23″即将到达集合地点2,当前已有” + cb.getNumberWaiting() + “个已经到达,美国空间,正在等候”);24 cb.await();25Thread.sleep((long)(Math.random()*10000));26System.out.println(“线程” + Thread.currentThread().getName() + 27″即将到达集合地点3,当前已有” + cb.getNumberWaiting() + “个已经到达,正在等候”);28 cb.await();29} catch (Exception e) {30 e.printStackTrace();31 }32 }33 };34 service.execute(runnable);35 }36 service.shutdown();37 }38 }若不给自己设限,则人生中就没有限制你发挥的藩篱。

CyclicBarrier的用法

相关文章:

你感兴趣的文章:

标签云: