Alf*_*red 4 java multithreading
正如标题显示,如果的Future.get(超时)超时,并线程继续运行,
ExecutorService executor = Executors.newFixedThreadPool(n);
Callable<Object> task = new Callable<Object>() {
public Object call() {
//...
}
}
Future<Object> future = executor.submit(task);
try {
Object result = future.get(5, TimeUnit.SECONDS);
} catch (TimeoutException ex) {
// handle the timeout
}
Run Code Online (Sandbox Code Playgroud)
如果线程继续运行,并得到阻止由于一些IO,等等,那么当线程池得到充分,没有新的任务可sumitted,这意味着trheadpool卡住,因为在池中的所有线程被阻塞,对不对?
对future.get(..)的调用将阻止运行它的线程最多5秒.线程池执行的任务将不受影响,并将继续运行,直到正常终止/异常/中断.
关于线程池满负荷时提交新任务,在您的情况下,将提交任务(立即释放提交者线程),但是将在线程池队列中等待执行.Executors.newFixedThreadPool(..)的API文档清楚地指明了这一点.
| 归档时间: |
|
| 查看次数: |
4994 次 |
| 最近记录: |