Java高并发测试代码
1、并发程序
/**
* 高并发测试:
* 创建threadNum个线程;
* 执行任务task
* @param threadNum 线程数量
* @param task 任务
*/
public static void parallelTesk(int threadNum, Runnable task){
// 1. 定义闭锁来拦截线程
final CountDownLatch startGate = new CountDownLatch(1);
final CountDownLatch endGate = new CountDownLatch(threadNum);
// 2. 创建指定数量的线程
for (int i = 0; i <threadNum; i++) {
Thread t = new Thread(() -> {
try {
startGate.await();
try {
task.run();
} finally {
endGate.countDown();
}
} catch (InterruptedException e) {
}
});
t.start();
}
// 3. 线程统一放行,并记录时间!
long start = System.nanoTime();
startGate.countDown();
try {
endGate.await();
} catch (InterruptedException e) {
}
long end = System.nanoTime();
System.out.println("cost times :" +(end - start));
}
2、应用
import java.util.concurrent.CountDownLatch;
public class Main {
/**
* 定义一个不安全方法:在高并发情况下得不到想要的结果
* queryTimes 是一个不安全的属性;
* getTimes是一个不安全方法;
*/
static int queryTimes = 0;
public static int getTimes(){
queryTimes = queryTimes +1;
return queryTimes;
}
/**
* 200个线程来执行获取getTimes
* @param args
*/
public static void main(String[] args) {
parallelTesk(200, new Runnable() {
@Override
public void run() {
System.out.println(getTimes());
}
});
}
/**
* 高并发测试:
* 创建threadNum个线程;
* 执行任务task
* @param threadNum 线程数量
* @param task 任务
*/
public static void parallelTesk(int threadNum, Runnable task){
// 1. 定义闭锁来拦截线程
final CountDownLatch startGate = new CountDownLatch(1);
final CountDownLatch endGate = new CountDownLatch(threadNum);
// 2. 创建指定数量的线程
for (int i = 0; i <threadNum; i++) {
Thread t = new Thread(() -> {
try {
startGate.await();
try {
task.run();
} finally {
endGate.countDown();
}
} catch (InterruptedException e) {
}
});
t.start();
}
// 3. 线程统一放行,并记录时间!
long start = System.nanoTime();
startGate.countDown();
try {
endGate.await();
} catch (InterruptedException e) {
}
long end = System.nanoTime();
System.out.println("cost times :" +(end - start));
}
}
凡你能说的,你说清楚。凡你不能说的,留给沉默!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf