最近学多线程的时候发现重写run()方法的时候,没办法传值,然后利用 构造注入,实现了线程的传值
public class ClirntAchieve implements Runnable{ private List<Qxconfigur> jmOrCqList ; private String beginDate ; private String endDate ; List<Map> resultlist = new ArrayList<>(); public ClirntAchieve( List<?> list,String beginDate,String endDate){ this.jmOrCqList = (List<Qxconfigur>) list; this.beginDate = beginDate; this.endDate = endDate; } @Override public void run() { BigDataController bc = new BigDataController(); resultlist = bc.resultcqBigdata(jmOrCqList, beginDate, endDate); for(Map qf:resultlist) { Client.allTableList.add(qf); } } }
这样就能用了。
还有一个坑
多线程执行的时候会有一定的时间,有时候线程没有执行完就会执行下一行代码,这时候我们需要判断下线程是否执行完,例子如下:
try {
Client client = new Client(jmOrCqList, beginDate, endDate);
while (true) {
if(){
break;
}
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}