对于Java多线程的理解,我以前仅仅局限于实现Runnable接口或者继承Thread类,然后重写run()方法,最后start()调用就算完事。但慢慢发现这样满足不了需求,比如说我要在线程完成之后再处理一些事情怎么办,或者我想要线程有一个返回值来让我判断线程中run方法中的程序有没有出错怎么办?
(1)在控制器中使用线程池创建线程
def importFlag = false
ExecutorService pool = Executors.newFixedThreadPool(2);
ReadSalaryExcelService thread01 = new ReadSalaryExcelService(importFlag)
ReadSalaryExcelService thread02 = new ReadSalaryExcelService(importFlag)
Future f1 = pool.submit(thread01);
Future f2 = pool.submit(thread02);
def f1Flag = f1.get() //获得返回值
def f2Flag = f2.get()
if(f1Flag == true || f2Flag == true){
importFlag = true
}
//关闭线程池
pool.shutdown()
//线程执行完毕之后如果没有报错
if(!importFlag){
//做接下来的事情
}
(2)在服务中实现Callable接口,重写call方法
class ReadSalaryExcelService implements Callable{
boolean importFlag
public ReadSalaryExcelService(boolean importFlag){
this.importFlag = importFlag
}
def read(){
try{
//业务逻辑代码
}catch(Exception e){
println "捕获:"+e
importFlag = true
}
}
@Override
public Object call() {
read()
return importFlag
}
}