Future
用future時,future作爲線程池的返回值,線程池的入參爲new Callable();
//定義線程池
ExecutorService executorService = Executors.newFixedThreadPool(30);
//1.用Future
List<Future<Integer>> futures = new ArrayList<Future<Integer>>();
String mainThreadName = Thread.currentThread().getName();
for(int i=0; i<10; i++){
Future<Integer> future = executorService.submit(new Callable<Integer>(){
public Integer call(){
String oldThreadName = Thread.currentThread().getName();
try{
System.out.println("oldThreadName==="+oldThreadName);
String newThreadName = mainThreadName + "===" + oldThreadName;
System.out.println("newThreadName==="+newThreadName);
Thread.currentThread().setName(newThreadName);
Thread.sleep(1 * 1000);
return 1;
}catch(Exception e){
return 1;
}finally{
// Thread.currentThread().setName(oldThreadName);
}
}
});
futures.add(future);
}
for(int j=0; j<10; j++ ){
try {
System.out.println(futures.get(j).get(25, TimeUnit.SECONDS));
}catch (Exception e){
System.out.println("超時了");
}
}
FutureTask:
用個FutrueTask時,構造FutureTask futureTask = new FutureTask(new Callable());
exe.submit(futureTask);
futureTask.get();
List<FutureTask<Integer>> tasks = new ArrayList<FutureTask<Integer>>();
for(int i=0;i<10;i++){
final Integer num = i;
FutureTask<Integer> task = new FutureTask(new Callable<Integer>(){
public Integer call(){
return num;
}
});
executorService.submit(task);
tasks.add(task);
}
for(int j=0; j<10;j++){
try {
System.out.println(tasks.get(j).get());
}catch (Exception e){
}
}