欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何让多线程同一时刻并发执行

程序员文章站 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次

如何让多线程同一时刻并发执行