package a;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class E {
public static void main(String[] args) {
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<String> future = pool.submit(new Callable<String>() {
public String call() throws Exception {
Thread.sleep(1000);
return "hello";
}
});
System.out.println("等待结果,可做其他事");
try {
System.out.println("拿到结果:"+future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
package a;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class F {
public static void main(String[] args) {
ExecutorService threadPool = Executors.newFixedThreadPool(10);
CompletionService<Integer> completionService=new ExecutorCompletionService<Integer>(threadPool);
for(int i=0;i<10;i++) {
final int seq=i;
completionService.submit(new Callable<Integer>() {
public Integer call() throws Exception {
Thread.sleep(new Random().nextInt(3000));
System.out.println(Thread.currentThread().getName()+"---"+seq);
return seq;
}
});
}
for(int i=0;i<10;i++) {
try {
System.out.println(completionService.take().get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
}