java多线程------向线程传参

  向线程传参的背景是:多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预估,因此,在传递和返回数据时就不同于函数通过函数参数和return语句来返回数据。

  不同于函数的调用,函数的调用通常是我们传入相应的参数,并且把这个函数将最终的计算结果进行返回,但是在多线程的异步开发模式下,数据的传递和返回与同步是存在很大的问题的。

  最近在做项目的时候遇到了一个问题就是:制作流量卡,制作流量卡的数目不是1或10张,而是几百万张,如果制作流量卡的时候程序一直停留在这个层面,那么这种同步的模式使得我们无法进行其他的操作,还有就是流量卡的批量锁定和激活都会涉及到大量数据,此时想到了使用多线程的异步模式来实现数据的传入和返回。

  既然我们要处理一些业务流程,那么就需要进行一些数据的初始化,将这些参数传递给多线程,待多线程进行处理后进行返回。

  当我们进行一个业务逻辑的处理的时候总是不希望停留一个页面而影响其他页面的操作,所以此时的异步线程显得很重要了。

       主要使用的异步线程是通过构造方法传递参数。主要的写法在创建线程时,必须要建立一个Thread类的或其子类的实例。因此,我们可以调用start方法之前通过线程类的构造方法将数据传入线程。并将传入的数据使用类变量保存起来,以便线程使用(其实就是在run方法中使用)。具体的使用方式是:

  在调用线程的地方使用下面的代码并且把参数进行传入:

 List<FlowCardInfoEntity> entities = flowCardInfoService.findHql(sbHql.toString(), null);

        message = "流量卡激活成功";
        try {
            /**
             * 使用线程使得其可以直接显示激活成功,这样的话可以使得线程在后台进行即可
             */
            Thread t = new JihuoThread(entities);
            t.start();

线程类的写法是:

 public class JihuoThread extends Thread {
        private List<FlowCardInfoEntity> entities;

        public JihuoThread(List<FlowCardInfoEntity> entities) {
            this.entities = entities;
        }

        public void run() {
            logger.info("entering....");
            try {
                FlowCardBatchInsert.JihuoFlowCardsState(logger, flowCardInfoService, systemService, entities);
            } catch (Exception ex) {
                logger.error(ex.getMessage(), ex);
            }
        }
    }

      真正实现业务逻辑的地方:就是在我们的方法JihuoFlowCardsState中进行定义即可。

      至此已经完成了,目前我使用的构造方法的方式传递的,还有别的方法,比如:变量和方法传递数据等,这个等以后用到的时候再讲。先到这里吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值