- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是场景:
我有一个 java 主进程,它使用 JMS 发布到某些 ActiveMQ 代理。
每次要向代理发送消息时,都会使用固定大小的线程池(使用 ThreadExecutor)中的一个线程,并在其中进行发布调用。
现在,发布调用是一个阻塞调用,如果代理关闭,线程本身将继续等待。
我想创建一个线程池,这样如果特定线程在 X 时间内没有完成任务,它就会简单地返回,即如果代理关闭并且发布没有完成,则线程不会继续等待,而是返回到池中。
目前还没有办法使这个发布调用异步,所以我猜处理这种情况的唯一方法就是上面提到的方法。
如果线程无法在给定的时间范围内完成任务,是否有任何 ThreadExecutor 允许我立即终止线程?
希望有人提供更优雅的解决方案。
最佳答案
ExecutorService
接口(interface)提供带有 timeout
参数的 invokeAll()
和 invokeAny()
方法。
示例:
ExecutorService executor = Executors..newFixedThreadPool(2);
executor.invokeAll(Arrays.asList(new Callable<Void>(){
@Override
public Void call() throws Exception {
try {
// do your task
} catch (InterruptedException e) {
// your task was forced to end
}
return null;
}
}), 5, TimeUnit.SECONDS);
executor.shutdown();
关于java - 如果需要更多时间,则终止 threadexecutor 中的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729069/
我有一个多线程服务器应用程序。其中一个 Runnables 使用无限循环来不断检查连接。这是使用 socket = serverSocket.accept() 完成的,这是一个阻塞调用。 当我关闭服务
如何在固定 threadExecutor 中访问 getOptimizedMol() 方法?我需要在每个优化器线程完成时获取返回分子? import chemaxon.marvin.calculati
我有这个代码: public T executeCodeBlockWithTimeLimit(String criticalBlockTimeOutMilli, Callable callable)
我正在尝试根据字符串长度按升序运行任务。但是它没有按预期工作。这是我迄今为止尝试过的代码: import java.util.Comparator; import java.util.concurre
这是场景: 我有一个 java 主进程,它使用 JMS 发布到某些 ActiveMQ 代理。 每次要向代理发送消息时,都会使用固定大小的线程池(使用 ThreadExecutor)中的一个线程,并在其
我是一名优秀的程序员,十分优秀!