/**
* 一种实现“通信层”的方案,主要演示超時控制
*
* 2012-12-26 according the Thinking in Java
*/
package concurrent;
import java.util.ArrayList;
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;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
class TaskWithResult implements Callable<String> {
private int id;
TaskWithResult() {
this.id = ++count;
}
private static int count = -1;
@Override
public String call() throws Exception {
long timeout = System.currentTimeMillis() + 1000 * count;
while (System.currentTimeMillis() < timeout)
;
return "result of TaskWithResult " + id;
}
}
public class CallableDemo {
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
ArrayList<Future<String>> results = new ArrayList<Future<String>>();
for (int i = 0; i < 10; i++) {
results.add(exec.submit(new TaskWithResult()));
}
for (Future<String> fs : results) {
try {
// get() blocks util completion:
System.out.println(fs.get(1, TimeUnit.SECONDS));
} catch (InterruptedException e) {
e.printStackTrace();
return;
} catch (ExecutionException e) {
e.printStackTrace();
return;
} catch (TimeoutException e) {
System.out.println("TimeoutException");
} finally {
exec.shutdown();
}
}
}
}
/**
* output(sample):
*
* <pre>
* result of TaskWithResult 0
* result of TaskWithResult 1
* result of TaskWithResult 2
* result of TaskWithResult 3
* result of TaskWithResult 4
* TimeoutException
* result of TaskWithResult 6
* result of TaskWithResult 7
* TimeoutException
* TimeoutException
* </pre>
*/
一种实现“通信层”的方案,主要演示超時控制
最新推荐文章于 2015-03-29 13:27:10 发布