博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java.util.concurrent.CyclicBarrier组件说明
阅读量:6158 次
发布时间:2019-06-21

本文共 2246 字,大约阅读时间需要 7 分钟。

hot3.png

一、CyclicBarrier

1、功能说明:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier(也翻译成栅栏)。

2、注意事项:CyclicBarrier可以使一定数量的参与方反复地在栅栏位置等待,常常用于模拟并发或者进行并行迭代计算。CyclicBarrier可以重置。

3、主要方法之构造方法CyclicBarrier(int parties)参数必须大于0的整数,这表示屏障点数量。

4、主要方法之等待CyclicBarrier.awit()在所有都已经在此 barrier 上调用 await 方法之前,将一直等待。

5、主要方法之CyclicBarrier.()返回当前在屏障处等待的参与者数目。

6、主要方法之CyclicBarrier.() 查询此屏障是否处于损坏状态。
7、主要方法之CyclicBarrier.()  将屏障重置为其初始状态。

8、如下例所示,常常用于来模拟并发,下面来模拟10个并发访问开源社区的首页。

注意:使用了第三方库(Jsoup)来解析html

Jsoup下载地址: core library

package org.com.jsoup;import java.io.IOException;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;public class CyclicBarrierTest {    /**     * 开源社区的首页地址     */	public final static String OSCHINA_HOME_PAGE = "http://www.oschina.net/";		public static void getOschinaPage(final String url) throws IOException{		//用了Jsoup库来解析html		Document doc = Jsoup.connect(url).get();		System.out.println(	doc.html().toString());		Element content = doc.getElementById("M_A_home_items");		if (content != null){			Elements links = content.getElementsByTag("A");			for (Element link : links) {			   String linkHref = link.attr("href");			   String linkText = link.text();			   System.out.println(String.format("href地址:%s", linkHref));			   System.out.println(String.format("a字符:%s", linkText));			}		}			}	/**	 * @param args	 * @throws InterruptedException 	 */	public static void main(String[] args) throws InterruptedException {		  //开始时间		   long beginTime =	 System.nanoTime();		  		  final int theadMax = 10;		  //创建一个线程池,限制为最多theadMax个线程		    final ExecutorService exec = Executors.newFixedThreadPool(theadMax);		    //创建栅栏,指定数量为theadMax			final CyclicBarrier cyclicBarrier = new CyclicBarrier(theadMax);			//创建锁存器,设置为theadMax个,表示要等待theadMax个线程执行完			final CountDownLatch downLatch = new CountDownLatch(theadMax);						for(int i=0;i

转载于:https://my.oschina.net/20076678/blog/80353

你可能感兴趣的文章
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>
【论文阅读】Classification of breast cancer histology images using transfer learning
查看>>
移动端处理图片懒加载
查看>>