假设有10个任务,需要指定5个线程去执行它们,代码如下:
public class Test {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(5);
try {
for(int i=0;i<10;i++){
// executorService.execute(new TaskExecuteThread("taskid"+i,"modid"+i));
Future future = executorService.submit(new TaskExecuteThread("taskid" + i, "modid" + i));
//if(future.get()==null){//如果Future get返回null,任务完成(注意:这里最好别直接get,因为get会阻塞。可以先将future对象存list,然后等所有线程都执行完后再遍历list,获取get。)
//System.out.println("任务完成"+"taskid" + i);
//}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getCause().getMessage());
} finally {
executorService.shutdown();
}
}
}
真实的任务执行类:
public class TaskExecuteThread extends Thread {
private String taskid;
private String modid;
public TaskExecuteThread(String taskid,String modid){
this.taskid=taskid;
this.modid=modid;
}
@Override
public void run() {
try {
System.out.println("当前线程:"+Thread.currentThread().getName());
System.out.println(taskid+modid);
System.out.println("========================================");
} catch (Exception e) {
throw new RuntimeException(e);
}finally {
}
}
}
运行结果:
当前线程:pool-1-thread-1
taskid0modid0
========================================
任务完成taskid0
当前线程:pool-1-thread-2
taskid1modid1
========================================
任务完成taskid1
当前线程:pool-1-thread-3
taskid2modid2
========================================
任务完成taskid2
当前线程:pool-1-thread-4
taskid3modid3
========================================
任务完成taskid3
当前线程:pool-1-thread-5
taskid4modid4
========================================
任务完成taskid4
当前线程:pool-1-thread-1
taskid5modid5
========================================
任务完成taskid5
当前线程:pool-1-thread-2
taskid6modid6
========================================
任务完成taskid6
当前线程:pool-1-thread-3
taskid7modid7
========================================
任务完成taskid7
当前线程:pool-1-thread-4
taskid8modid8
========================================
任务完成taskid8
当前线程:pool-1-thread-5
taskid9modid9
========================================
任务完成taskid9