如何让多线程同一时刻并发执行
程序员文章站
2024-03-13 12:36:21
...
多线程同一时刻并发执行
代码使用场景:需要在本机试试自己的接口在某个时间访问可以被执行的频率【严格意义上来说,不算同一时刻,因为多线程执行也是上下文切换的】
其实你想找的是某个时间范围(如一秒内),你的接口调用频率【下单,加购,保存数据】,下面的代码可以参考
要点
- 使用
volatile
定义同一时刻执行的开关 - 要让线程都等待到同一时刻再执行
代码实现
第一步 定义线程
public class RunnableDemo implements Runnable {
/** 做一个开头,valatile修饰的变量如果修改,可以马上被其它线程读取 */
public volatile static Boolean showTime = false;
/** 申明一个线程 */
private Thread thread;
/** 只是统计执行次数 */
public static Integer count=0;
private void action() {
//做自己的业务
System.out.println("threadName:" + thread.getName() + ",time:" + System.currentTimeMillis());
}
public void run() {
while (!showTime) {
//action(); //如果循环只是做控制流程,建议不要将业务方法放到循环中,因为出现异常会有惊喜
break;
}
action();
//只是统计执行的线程数
synchronized (count){
count++;
}
}
public void start() {
if (thread == null) {
thread = new Thread(this);
}
thread.start();
}
}
第二步 设置并发执行
public class StaticModeSingletonDemo {
public static void main(String[] args) {
//这次测试是一百个线程,一秒内执行的情况
concurrenceTest(1000L,100);
}
private static void concurrenceTest(Long millisecond, Integer threadCount) {
Long endTime = System.currentTimeMillis() + millisecond;
//初始化线程,并开始
for (int i = 0; i < threadCount; i++) {
new RunnableDemo().start();
}
//线程中的业务代码开始执行
RunnableDemo.showTime = true;
//到时间设置false
while (endTime < System.currentTimeMillis()) {
System.out.println("RunnableDemo.showTime=false");
RunnableDemo.showTime = false;
break;
}
System.out.println("一共执行了" + RunnableDemo.count + "次");
}
}
第四步 查看运行结果结果
可以看出来一秒内是执行了74次
上一篇: C#推送微信公众号模版消息
推荐阅读