java并发测试帮助方法

public class SimulateHighConcurrency {

    public static void run(int num, Consumer<Thread> action) {
        Objects.requireNonNull(action);
        CountDownLatch countDownLatch = new CountDownLatch(1);
        for (int i = 0; i < num; i++) {
            new Thread(() -> {
                try {
                    action.accept(Thread.currentThread());
                    countDownLatch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
        //线程创建完成之后同时启动
        countDownLatch.countDown();
    }

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch doneSignal = new CountDownLatch(2000);
        SimulateHighConcurrency.run(2000, (t) -> {
            System.out.println(t.getName());
            doneSignal.countDown();
        });
        doneSignal.await();
        System.out.println("done");
    }

}

原文地址:https://www.cnblogs.com/warrior/p/12204129.html

时间: 2024-10-17 03:26:53

java并发测试帮助方法的相关文章

PHP接口并发测试的方法

PHP接口并发测试的方法 <pre> header('Content-type:text/html; Charset=utf-8'); $uri = "输入你的url"; $data = array( 'test'=>1 ); $ch = curl_init();// print_r($ch); curl_setopt($ch, CURLOPT_URL, $uri); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch

Jmeter运营活动并发测试—巧用集合点

在运营活动测试过程中,经常需要对秒杀活动或定时抽奖活动进行并发测试.那么怎样快速便捷的模拟多用户同时参与活动,抽取奖品,进行并发测试呢?尤其是,当奖品总数N<用户总数M时,代码是否会存在奖品多发给用户,导致奖品剩余总数出现负数的严重bug? 下面介绍使用轻量级开源测试工具Jmeter进行并发测试的方法--巧用集合点. 以总产品数为3,模拟多用户(5个用户)同时进行抽奖并发测试为例,进行介绍.         思路:首先在运营后台配置产品总数为3,其次模拟多用户登陆,最后通过设置集合点的方式,模拟

【java并发核心一】Semaphore 的使用思路

最近在看一本书<Java并发编程 核心方法与框架>,打算一边学习一边把学习的经验记下来,所粘贴的代码都是我运行过的,大家一起学习,欢迎吐槽. 估计也没多少人看我的博客,哈哈,那么我还是会记下来,天空不曾留下我的痕迹,但我已飞过,而在博客园留下了我的痕迹~ 1.Semaphore的初步使用 Semaphore是什么,能做什么? Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量.就这一点而言,单纯的synchronized 关键字是实现不了的. 直接看例子吧,这

《Java并发编程实战》第十二章 测试并发程序 读书笔记

并发测试分为两类:安全性测试(无论错误的行为不会发生)而活性测试(会发生). 安全測试 - 通常採用測试不变性条件的形式,即推断某个类的行为是否与其它规范保持一致. 活跃性測试 - 包含进展測试和无进展測试两个方面. 性能測试与活跃性測试相关,主要包含:吞吐量.响应性.可伸缩性. 一.正确性測试 找出须要检查的不变条件和后延条件. import java.util.concurrent.Semaphore; public class BoundedBuffer<E> { private fin

Java线程测试高并发

package com.expai.utils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.Execu

《java并发编程实战》读书笔记9--并发程序的测试

第12章 并发程序的测试 大致分为两类:安全性测试和活跃性测试 12.1 正确性测试 找出需要检查的不变性条件和后验条件.接下来将构建一组测试用例来测试一个有界缓存.程序清单12-1给出了BoundedBuffer的实现,其中使用Semaphore来实现缓存的有界属性和阻塞行为. BoundedBuffer实现了一个固定长度的队列,其中定义了可阻塞的put和take方法,并通过两个计数信号量进行控制.(实际情况中如果需要一个有界缓存,应该直接使用ArrayBlockingQueue或者Linke

JAVA并发-为现有的线程安全类添加原子方法

JAVA中有许多线程安全的基础模块类,一般情况下,这些基础模块类能满足我们需要的所有操作,但更多时候,他们并不能满足我们所有的需要.此时,我们需要想办法在不破坏已有的线程安全类的基础上添加一个新的原子操作.有如下4中方案: 1 修改类的源码,以添加新的原子操作 2 继承该线程安全类,并添加原子操作 3 使用客户端加锁方式 4 使用组合方式(推荐) 一般来讲,修改源码的方式不太可行,这样会破坏原有类的封装性而且有些时候,源码不可获得.我们从第二种方式开始举例: 假设现在对于类Vector,我们知道

第十二章:并发程序的测试——Java并发编程实战

并发程序中潜在错误的发生并不具有确定性,而是随机的. 安全性测试:通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致 活跃性测试:进展测试和无进展测试两方面,这些都是很难量化的(性能:即吞吐量,响应性,可伸缩性测试) 一.正确性测试 重点:找出需要检查的不变性条件和后验条件 1.对基本单元的测试--串行的执行 1 public class BoundedBufferTests { 2 3 @Test 4 public void testIsEmptyWhenConstruct

java并发-线程饥饿死锁测试

线程饥饿死锁 <Java并发编程实践>中对线程饥饿死锁的解释是这样的:在使用线程池执行任务时,如果任务依赖于其他任务,那么就可能产生死锁问题.在单线程的Executor中,若果一个任务将另一个任务提交到同一个Executor,并且等待这个被提交的任务的结果,那么这必定会导致死锁.第一个任务在工作队列中,并等待第二个任务的结果:而第二个任务则处于等待队列中,等待第一个任务执行完成后被执行.这就是典型的线程饥饿死锁.即使是在多线程的Executor中,如果提交到Executor中的任务之间相互依赖