CyclicBarrier是什么?
JDK1.5开始提供的并发编程,辅助工具类。可用于并发编程的。在项目中往往需要使用工具对项目某一个功能或者接口进行并发测试,使用CyclcBarrier工具可以让线程创建后进入队列阻塞,当队列中的数量达到一定数目的时候,同时运行。
那么我们再来看jdk源码中对它的解释,如图:
如何去使用CyclicBarrier工具类?
接下来我们就使用CyclicBarrier来构建 一个简单的并发测试工具-模拟用户抢购商品,需要导入httpclient工具包:maven:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.4</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5</version>
</dependency>
核心代码:
public class DemoThread extends Thread {
// 使用CycleBarrier 实现同时500个线程并行运行
private static CyclicBarrier cb = new CyclicBarrier(500);
@Override
public void run() {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("这里填写你需要测试url");
try {
cb.await();
HttpResponse response = httpclient.execute(httpGet);
System.out.println("进行下单,当前线程的id" + currentThread().getId());
HttpEntity entity = response.getEntity();
System.out.println(entity);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
main方法:
public class Main {
public static void main(String []args)
{
System.out.println("并发测试-moni 同时500个用户抢购商品");
//moni 同时500个用户抢购商品
for(int i=0;i<500;i++)
{//countDownLatch.
DemoThread thread=new DemoThread();
thread.start();
}
}
}
以上就是我归纳的对的CyclicBarrier实现,如果有哪些地方有问题,欢迎大家留言指正,感激不尽!