- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试构建类似后台任务执行器的东西,如果没有答案,它会在一定时间后终止后台任务(后台任务调用 web 服务,它们可能会超时,但我需要确保它们在一定时间内超时时间)
所以我将此作为实验,但如果我运行此程序,程序不会终止。我想知道是不是因为后台线程仍然处于 Activity 状态?我怎样才能关闭它?
public class Test {
public static class Task implements Callable<Object> {
@Override
public Object call() throws Exception {
while(true) {}
}
}
public static void main(String[] args) {
try {
Task t = new Task();
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(t), 5L, TimeUnit.SECONDS);
executor.shutdown();
System.out.println("DONE");
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
最佳答案
ExecutorService 不会杀死正在运行的线程,并且由于线程是作为非守护进程创建的,因此 JVM 不会退出。
当超时到期时,invokeAll() 返回的 futures 被取消,这意味着在 future 对象上设置了一个标志,你会得到一个 CancellationException
如果您尝试调用 future.get()
。然而,invokeAll() 和 shutdown()(或 shutdownNow())都没有做任何事情来终止线程。
请注意,您甚至不能自己终止线程。您所能做的就是设置一些特定于应用程序的标志或调用 Thread.interrupt()
,但即使那样也不能保证 the thread terminates .
关于Java ExecutorService - 为什么这个程序一直在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32301891/
我有一个在 Android 市场上相当流行的应用程序,它允许数以万计的用户按下一个按钮并向它发出语音命令。然后我就可以做很多不同的事情,比如给他们提供当前的天气预报等等...... 无论如何,我的应用
令人惊讶的是,标题基本上解释了它。我们有一个我们的客户制作的页面,我们正在重新创建该页面。 页面高度会一直增加,直到(我假设是这样)浏览器达到它的极限。我已经尝试过 Firebug 和 W3 验证器,
我是 react-native 的新手,试图创建我自己的组件,但它一直显示一个空屏幕。 这是我的组件代码 class BoxComponent extends Component { cons
我正在为我的 PHP 元素创建一个非常简单的博客,但遇到了一个简单的问题。我无法让我的页眉图像一直 float 。我有一个横幅,左边有一些文字,我有一个 1px 的切片,在可以选择的任何分辨率的宽度上
为什么我可以在另一个 Controller 的 View 中访问一个 Controller 的辅助方法?有没有办法在不破解/修补 Rails 的情况下禁用它? 最佳答案 @George Schreib
我正在使用带有最新 ADT 插件的 Eclipse Kepler SP2。每隔一分钟 Eclipse 就会说“为 Android 4.4.2 加载数据”并阻止我想做的一切。我在不同的文件夹中有几个 E
我是一名优秀的程序员,十分优秀!