zoukankan      html  css  js  c++  java
  • 多线程(五)实战使用并发工具类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实现,如果有哪些地方有问题,欢迎大家留言指正,感激不尽!

  • 相关阅读:
    Go网络文件传输
    Go网络编程
    LNMP环境搭建(PHP7.4.0)
    LNMP环境搭建(PHP7.2.25)
    Please ensure the argon2 header and library are installed
    MySQL权限管理
    nginx ingress controller配置默认SSL证书
    kubernetes pod内抓包,telnet检查网络连接的几种方式
    ansible取出register变量中最长字符串
    kubernetes flannel pod CrashLoopBackoff解决
  • 原文地址:https://www.cnblogs.com/grj001/p/12225339.html
Copyright © 2011-2022 走看看