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实现,如果有哪些地方有问题,欢迎大家留言指正,感激不尽!

  • 相关阅读:
    leetcode 576. Out of Boundary Paths 、688. Knight Probability in Chessboard
    leetcode 129. Sum Root to Leaf Numbers
    leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
    leetcode 402. Remove K Digits 、321. Create Maximum Number
    leetcode 139. Word Break 、140. Word Break II
    leetcode 329. Longest Increasing Path in a Matrix
    leetcode 334. Increasing Triplet Subsequence
    leetcode 403. Frog Jump
    android中webView加载H5,JS不能调用问题的解决
    通过nginx中转获取不到IP的问题解决
  • 原文地址:https://www.cnblogs.com/grj001/p/12225341.html
Copyright © 2011-2022 走看看