您的位置:首页 > 编程语言 > Java开发

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

2016-03-31 08:14 555 查看
  向线程传参的背景是:多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预估,因此,在传递和返回数据时就不同于函数通过函数参数和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中进行定义即可。

      至此已经完成了,目前我使用的构造方法的方式传递的,还有别的方法,比如:变量和方法传递数据等,这个等以后用到的时候再讲。先到这里吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: