Java中同时启动多个线程并传入不同参数

最近在写多线程测试程序的时候遇到了一些问题,根据参考及自己实践,做记录如下

threadLocal原理及说明参考

threadLocal

Java中同时启动多个线程(CountDownLatch)

同时启动多个线程

Java向线程传入参数

Java向线程传入参数的三种方法
可以通过构造器或者set的方式,或者回调函数传入

同时启动多个线程并传入不同的参数(自己练习)

方式一:使用threadLocal+CountDownLatch
  1. threadLocal用于存储线程的局部变量,不同的线程启动后存入线程各自的参数,然后去获取。
  2. CountDownLatch用于控制线程同时启动
public class Test {
   
  ThreadLocal<String> threadLocal=new ThreadLocal<String>();
  @Test
  public void findOrderSplitDetailsTest() throws InterruptedException {
   
      QueryOrderByPayReqVo reqVo=new QueryOrderByPayReqVo();
      reqVo.setOrderId("56290014401");
      orderQueryResource.findOrderSplitDetails(reqVo);
      Thread.sleep(1000L);
      CreateOrderReqVo reqVo1=new CreateOrderReqVo();
      reqVo1.setPayMode(2);
      reqVo1.setParentOrderId("56290014401");
      reqVo1.setOrderId("56308748910");
      CountDownLatch countDownLatch = new CountDownLatch(3);

      for (int i=0; i<3; i++) {
   
      //本意是这样实现给不同的线程传入不同的参数,然后因为reqVo是myThread1中的成员变量,不是run方法中的局部变量,所以是不对的
          /*if(i==1){
              reqVo1.setOrderId("56308748911");
          }else if(i==2){
              reqVo1.setOrderId("56308748912");
          }*/
          Thread thread = new Thread(new myThread1(reqVo1,countDownLatch));
          thread.setName("线程-" + (i+1));
          thread.start();
          countDownLatch.countDown();
      }
      Thread.sleep(1000L);
  }


  public class myThread1 implements Runnable{
   
      CreateOrderReqVo reqVo;
      private final CountDownLatch countDownLatch;
      public myThread1(CreateOrderReqVo reqVo,CountDownLatch   countDownLatch){
   
          this.
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值