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;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
public class ThreadPool {
static class ComputationRunnable implements Callable<Integer> {
private int index;
private static final Random random = new Random(31);
public ComputationRunnable(int index) {
this.index = index;
}
@Override
public Integer call() {
try {
int r = random.nextInt(10);
if (r == 5) {
throw new RuntimeException("Error!!");
}
TimeUnit.MILLISECONDS.sleep(r);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return Integer.valueOf(index);
}
}
public static void main(String[] args) {
ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime()
.availableProcessors());
CompletionService<Integer> ecs = new ExecutorCompletionService<Integer>(es);
for (int i = 0; i < 100; i++) {
ecs.submit(new ComputationRunnable(i));
}
for (int i = 0; i < 100; i++) {
Future<Integer> future = null;
try {
future = ecs.poll(1, TimeUnit.MILLISECONDS);
if (future != null) {
int ii = future.get();
System.out.println(ii);
} else {
System.out.println("\t未按时完成");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (ExecutionException e) {
// 任务没有正常执行,需要处理
// e.printStackTrace();
System.out.println("\t\t任务执行中出错");
future.cancel(true);
}
}
es.shutdown();
}
}