多线程(五)-实战使用并发工具类CyclicBarrier实现并发测试
2019年05月18日 14:40:11 面向大佬编程ing 阅读数:2902 标签: CyclicBarrier并发编程多线程更多
个人分类: 多线程与并发编程
版权声明: https://blog.csdn.net/RAVEEE/article/details/90315068
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实现,如果有哪些地方有问题,欢迎大家留言指正,感激不尽!