由于要获取线程中的返回值,所以将new thread (() - > {}) 里面的代码想用future来写。
但是改完之后,调用方法之后,整个页面直接卡住,难道future不应该是另起一个线程吗?
求助。
同样的执行代码,我放在new thread()里面就是能正常调用。而且也不会影响页面的其他功能
代码如下:
private ExecutorService executorService = WorkThreadPoolConstants.WORK_POOL_INSTANCE;
@Transactional
public String rebuildAccountSet() {
if(isrebuildAccountSet == true) {
log.info("正在执行重建任务,忽略本次请求");
return "提示1";
}
synchronized(this) {
if(isrebuildAccountSet == true)
return "提示2 " ;
isrebuildAccountSet = true;
Task task = new Task();
FutureTask<String> futureTask = new FutureTask<String>(task);
executorService.submit(futureTask);
//让子线程飞一会
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
return (String) futureTask.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
return "";
}
class Task implements Callable<String>{
@Override
public String call() throws Exception {
//很耗时,大约30分钟左右的执行时间,频繁的写入数据到数据库
//调用到了内部的方法
}
}