【发布时间】:2016-01-21 01:50:03
【问题描述】:
我是 Java 并发包的新手,想尝试 ExecutorService 来控制线程的执行时间。
所以对于一个保持运行的线程 MyThread,我想使用 ExecutorService 和 Future 类在 2 秒后停止它。
public class MyThread extends Thread {
public static int count = 0;
@Override
public void run() {
while (true) {
System.out.println(count++);
}
}
}
public static void main(String[] args) throws IOException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(1);
MyThread thread = new MyThread();
FutureTask<String> futureTask = new FutureTask<String>(thread, "success");
try {
executorService.submit(futureTask).get(2, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimeoutException e) {
System.out.println("timeout");
e.printStackTrace();
executorService.shutdownNow();
}
}
但是,线程仍然在 2 秒后继续打印数字。如何在不改变 MyThread 类本身的情况下控制线程?
【问题讨论】:
-
您已经编写了无限循环来打印数字。应该修改该类中的代码。
-
我使用无限循环来查看ExecutorService是否可以停止线程。