• 多线程(五)实战使用并发工具类CyclicBarrier实现并发测试


    多线程(五)-实战使用并发工具类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:

    
     
    1. <dependency>

    2. <groupId>org.apache.httpcomponents</groupId>

    3. <artifactId>httpclient</artifactId>

    4. <version>4.5</version>

    5. </dependency>

    6.  
    7. <dependency>

    8. <groupId>org.apache.httpcomponents</groupId>

    9. <artifactId>httpcore</artifactId>

    10. <version>4.4.4</version>

    11. </dependency>

    12.  
    13. <dependency>

    14. <groupId>org.apache.httpcomponents</groupId>

    15. <artifactId>httpmime</artifactId>

    16. <version>4.5</version>

    17. </dependency>

    核心代码:

    
     
    1. public class DemoThread extends Thread {

    2.  
    3. // 使用CycleBarrier 实现同时500个线程并行运行

    4. private static CyclicBarrier cb = new CyclicBarrier(500);

    5. @Override

    6. public void run() {

    7. HttpClient httpclient = new DefaultHttpClient();

    8. HttpGet httpGet = new HttpGet("这里填写你需要测试url");

    9. try {

    10. cb.await();

    11. HttpResponse response = httpclient.execute(httpGet);

    12. System.out.println("进行下单,当前线程的id" + currentThread().getId());

    13. HttpEntity entity = response.getEntity();

    14. System.out.println(entity);

    15. } catch (ClientProtocolException e) {

    16. // TODO Auto-generated catch block

    17. e.printStackTrace();

    18. } catch (IOException e) {

    19. // TODO Auto-generated catch block

    20. e.printStackTrace();

    21. } catch (InterruptedException e) {

    22. // TODO Auto-generated catch block

    23. e.printStackTrace();

    24. } catch (BrokenBarrierException e) {

    25. // TODO Auto-generated catch block

    26. e.printStackTrace();

    27. }

    28.  
    29. }

    30.  
    31. }

    main方法:

    
     
    1.  
    2. public class Main {

    3.  
    4. public static void main(String []args)

    5. {

    6. System.out.println("并发测试-moni 同时500个用户抢购商品");

    7. //moni 同时500个用户抢购商品

    8. for(int i=0;i<500;i++)

    9. {//countDownLatch.

    10. DemoThread thread=new DemoThread();

    11. thread.start();

    12. }

    13.  
    14. }

    15.  
    16.  
    17. }

    以上就是我归纳的对的CyclicBarrier实现,如果有哪些地方有问题,欢迎大家留言指正,感激不尽!

  • 相关阅读:
    【Vegas原创】解决System.Web.Extensions版本冲突方法
    【Vegas原创】GridView修改表头,并导出Excel(C#版)
    bdump,cdump,udump作用
    【Vegas原创】用正则表达式解决FCKEditor图片路径问题
    【Vegas改编】获取,更新web.config的值
    面向对象和面向过程的区别
    【Vegas原创】删除有内外键关系数据的方法
    提供css滤镜代码,变网页为黑白,为在地震中遇难的同胞哀悼
    【Vegas原创】将treeview父结点的链接改为折叠事件
    C#经典试题
  • 原文地址:https://www.cnblogs.com/grj001/p/12225339.html
Copyright © 2020-2023  润新知