作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个可以在线程中执行的特定进程。我需要在一定时间后完全停止处理,例如:90秒。
我读到我们在futuretask中有一个选项可以设置线程超时。但是我收到超时异常,但是启动的任务正在后端运行,在使用futureTask.cancel(true)
或executor.isShutdown()
时并没有完全停止。
我试图将其拆分并测试如何完全停止线程,但是即使在示例代码下面,我也无法完全停止启动的线程。使用以下代码,可取消调用在取消线程后不会返回String,但是我可以看到for不会在取消线程时停止。
请帮助我错过的地方吗?
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class FutureTaskDemo {
public static void main(String... args) throws InterruptedException, ExecutionException{
ExecutorService exService = Executors.newSingleThreadExecutor();
FutureTask<String> futureTask= new FutureTask<String>(new Task());
exService.execute(futureTask);
//checks if task done
System.out.println("Task Done :"+futureTask.isDone());
//checks if task canceled
System.out.println("Task isCancelled :"+futureTask.isCancelled());
boolean isCancel = futureTask.cancel(true);
System.out.println("Cancelled :"+isCancel);
//fetches result and waits if not ready
System.out.println("Task is done : "+futureTask.get());
}
}
class Task implements Callable<String>{
public String call() {
for (int i=0; i<10000; i++){
System.out.println(i);
}
return "Task Done";
}
}
最佳答案
完全停止线程的唯一方法是终止进程。如果要正常停止任务并保持程序运行,则Task需要支持此操作。
public String call() {
for (int i = 0; i < 10000 && !Thread.currentThread().isInterrupted(); i++) {
System.out.println(i);
}
return "Task Done";
}
关于java - 如何在1.8中使用可调用的futuretask完全杀死正在执行的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041532/
在不使用 css 或 table 的情况下帮助 php 或 html 中的 div 新手。 尝试使用具有以下行为的 div 执行此 4 x 列、2 x 行 // [.....adjustable..
我有这个部分: 我想要实现的是让左边的跨度,右边的填充,然后是中间的 HR,右边的跨度和价格,但我想让价格对齐向右,并使 HR 可调,因此它始终以价格结束并在第一个跨度之后开始。无论我如何尝试,我都无
我是一名优秀的程序员,十分优秀!