有没有一种方法可以立即杀死Java中的线程?

时间:2019-04-08 15:23:58

标签: java multithreading

我正在使用Java,因此我需要运行一个任务直到完成或发生超时,到目前为止,我发现我应该使用ExecutorService和Future对象。然后,我可以执行任务,并且一旦达到超时,就可以发送信号以停止线程,问题是,除非我修改任务以主动检查中断信号,否则线程不会终止。

我有下面的代码可以工作,但不能像我希望的那样工作。我的真实代码有所不同,但是出于测试目的,我刚刚创建了一个打印“ hello”直到被打断的任务。

ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<Void> future = executor.submit(new Callable<Void>() {
            public Void call() throws Exception {
                boolean test = true;
                while (test && !Thread.currentThread().isInterrupted())
                    System.out.println("hello");
                return null;
            }
        });
        try {
            future.get(2000l, TimeUnit.MILLISECONDS);
        } catch (TimeoutException e) {
            System.err.println("Timeout");
        }
        executor.shutdownNow();
        executor.awaitTermination(5000l, TimeUnit.MILLISECONDS);

此方法存在两个问题:

  1. 我的任务的一次迭代可能真的很长,具体取决于给出的输入(1小时或更长时间),因此,如果我给它指定5分钟的超时时间,我实际上必须等待1个小时以上才能进行迭代在检测到它被中断之前结束。
  2. 我认为无需更改任务代码以检测中断即可随时杀死线程。

一旦达到超时,是否有一种更快速的杀死线程的方法?

谢谢!

0 个答案:

没有答案