如何超时newSingleThreadScheduledExecutor

时间:2018-03-27 00:36:07

标签: java android multithreading

在Android中,我试图启动一个杀死自身的线程,或者在超时限制(例如20秒)之后由执行程序取消?因此,runnable只会在很多秒内完成它的工作而不是取消...

我如何实现这一目标?我现在正在开始如下。

Executors.newSingleThreadScheduledExecutor().schedule(myRunnable, 0, TimeUnit.MILLISECONDS);

我的runnable看起来像这样

static class MyRunnable implements Runnable {


     MyRunnable(Helper _helper) {
        helper = _helper;
    }


    public void run() {


    }
}

1 个答案:

答案 0 :(得分:0)

如果您要停止已提交给ExecutorService的任务,则您需要处理Future个对象。

喜欢这个答案:

Stop a Runnable submitted to ExecutorService

基本上你会submit一个Runnable并找回一个Future对象,你可以用来取消它。

具体到您的担忧:在20秒内停止一项任务,您可以使用{1}}从第一项任务切换到另一项任务,如下所示:

Future

重要 - 您必须在ExecutorService executor = Executors.newSingleThreadScheduledExecutor(); // Schedule your audio processing job like normal. final Future<?> future = executor.submit(new MyAudioProcessingRunnable()) // Schedule the cancelation to happen in 20 seconds. executor.schedule(new Runnable() { if (!future.isCancelled() && !future.isDone()) { // Cancel and interrupt any blocking calls. future.cancel(true); } }, 20, TimeUnit.Seconds); 中包含代码以支持取消。