//建立线程池批量处理
//核心线程8个,最大16个,等待队列100个
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(8, 16, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(100));
for (int i = 0; i < ids.length; i++) {
try {
//执行方法
ApproveContractTask approveContractTask = new ApproveContractTask( uid, roleList,porderService);
threadPool.submit(approveContractTask);
System.out.println("此时等待队列中有" + threadPool.getQueue().size() + "个元素");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
threadPool.shutdown();
//两种判断线程结束方法
//第一种
boolean loop = true;
while (true) {
boolean success = threadPool.isTerminated();
//System.out.println("此时等待状态" + success);
if (success) {
System.out.println("线程结束");
break;
}
Thread.sleep(200);
}
//第二种
do {
//等待所有线程执行完毕当前任务结束
loop = !threadPool.awaitTermination(2, TimeUnit.SECONDS);//等待2秒
} while (loop);
if (loop != true) {
System.out.println("所有线程执行完毕");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
//ApproveContractTask 方法
public class ApproveContractTask implements Callable, Serializable {
private String uid;
private List<Long> roleList;
public ApproveContractTask(POrderService porderService, String uid, List<Long> roleList) {
this.porderService = porderService;
this.uid = uid;
this.roleList = roleList;
}
//使用Callable
@Override
public ResultUtil call() throws Exception {
porderService.approveContract(uid, roleList,);
Thread.sleep(1000);
return null;
}
//使用runnable
@Override
public void run() {
try {
porderService.approveContract(uid, roleList);
Thread.sleep(1000);
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
}