JDK环境:1.8(貌似1.7传参数的时候支持的不是很好)。
public static void main(String[] args) throws ExecutionException, InterruptedException {
Calendar c1 = Calendar.getInstance();
testThread();
Calendar c2 = Calendar.getInstance();
System.out.println("执行毫秒数:" + (c2.getTimeInMillis() - c1.getTimeInMillis()));
}
public static void testThread() throws ExecutionException, InterruptedException {
//ExecutorService executorService = Executors.newCachedThreadPool();
ExecutorService executorService = new ThreadPoolExecutor(5, 20, 1000, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
List<Future<String>> futureList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String random = String.valueOf(new Random().nextInt(5) * 1000);
String index = String.valueOf(i);
Future<String> future = executorService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("我是线程:" + index + ",需要沉睡:" + random + "秒");
Thread.sleep(Integer.valueOf(random));
return String.valueOf(index);
}
});
futureList.add(future);
}
for (int i = 0; i < futureList.size(); i++) {
// 设置请求超时时间
String result = futureList.get(i).get(10000, TimeUnit.MILLISECONDS);
//String result = futureList.get(i).get();
System.out.println("我是序号:"+ i +",我是线程:" + result + ",已经执行完毕");
}
executorService.shutdown();
}
这里的Callable可以自定义实现,看大家需要了。