好像没有很简单的方式,我再想想!下面这个虽然行,但是觉得有点复杂,觉得应该会有简单的方式:

import java.util.concurrent.*;
import java.util.*;
import java.io.*;
class Task implements Callable<String> {
public String call() {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {}
return "Finished!";
}
public static void main(String[] args) throws Exception {
ExecutorService exec = Executors.newCachedThreadPool();
ArrayList<Future<String>> results = new ArrayList<Future<String>>();
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String line;
System.out.print("$ ");
while ((line = stdin.readLine()) != null && line.length() != 0) {
results.add(exec.submit(new Task()));
for (Iterator<Future<String>> iterator = results.iterator(); iterator.hasNext(); ) {
Future<String> future = iterator.next();
if (future.isDone()) {
System.out.println(future.get());
iterator.remove();
}
}
System.out.print("$ ");
}
exec.shutdown();
}
}