-
关于Future.cancel(mayInterruptIfRunning)方法的参数的问题5
Future提供cancel方法来支持取消一个任务。它携带一个boolean的参数,这个参数在true和false的情况下有什么不同呢?
似乎都是通过设置中断标志来结束一个任务啊。。。求详解。2011年12月25日 16:00
1个答案 按时间排序 按投票排序
-
mayInterruptIfRunning设成false话,不允许在线程运行时中断,设成true的话就允许。
可以参考下面的代码来理解,如果设为false的话,会打印到99999,如果设成true的话,可能就打印不到99999/* @author:vc_java@hotmail.com */ package interrupt; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Future01 { public static void main(String[] args) { ExecutorService eService = Executors.newFixedThreadPool(5); Future<?> future= eService.submit(new RunFuture()); try { Thread.sleep(1000); future.cancel(false); System.out.println("haha---------------"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class RunFuture implements Runnable{ int i=0; @Override public void run() { while (i<100000&&!Thread.currentThread().isInterrupted()/**/) { System.out.println("i++:"+i); i++; } } }
2012年5月28日 21:01
相关推荐
1. `boolean cancel(boolean mayInterruptIfRunning)`:此方法用于尝试取消任务的执行。如果 `mayInterruptIfRunning` 为 true,那么正在执行的任务会被立即中断;如果为 false,那么只有当任务已完成或可取消时才会...
如果任务尚未开始或者正在运行,mayInterruptIfRunning参数决定是否中断正在执行的任务。 异步Future机制通常与ExecutorService和Callable接口一起使用。ExecutorService是一个线程池服务,可以提交任务并管理它们...
mayInterruptIfRunning参数决定是否中断正在运行的任务。 4. **isDone()**: 检查任务是否已完成。 5. **isCancelled()**: 检查任务是否已被取消。 6. **call()**: 返回结果的方法,允许抛出异常。 **使用场景** ...
3. 任务取消:可以通过`Future.cancel(boolean mayInterruptIfRunning)`方法取消正在执行的任务,如果`mayInterruptIfRunning`为true,会尝试中断正在运行的任务。 了解和熟练使用ScheduledExecutorService对于提高...
解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...
4. `cancel(boolean mayInterruptIfRunning)`:此方法用于尝试取消正在进行的计算。如果`mayInterruptIfRunning`为`true`,则会尝试中断正在执行的计算任务。如果任务尚未开始,或者可以安全地取消,`cancel()`方法...
`FutureTask`类也支持超时控制,通过`FutureTask.cancel(boolean mayInterruptIfRunning)`方法可以尝试取消正在执行的任务,并且可以选择是否中断正在运行的线程。 8. **自定义超时策略** 对于更复杂的场景,可能...
3. **取消任务**:`cancel(boolean mayInterruptIfRunning)` 方法可以取消任务执行。`mayInterruptIfRunning` 参数决定是否立即中断正在执行的任务。 4. **判断是否已取消**:`isCancelled()` 方法用于检查任务是否...
- `cancel(boolean mayInterruptIfRunning)`:尝试取消任务,参数决定是否中断正在执行的任务。 在示例中,我们调用`future1.get()`获取第一个任务的结果,然后在等待5秒后尝试取消第二个任务(`future2.cancel...
此外,还可以通过`.isDone()`方法检查操作是否完成,以及通过`.cancel(boolean mayInterruptIfRunning)`方法取消未完成的操作。 ##### 4.2 客户端设置 客户端需要创建一个`AsynchronousSocketChannel`并尝试与...
当不再需要任务时,可以通过`cancel(boolean mayInterruptIfRunning)`方法取消。如果`mayInterruptIfRunning`为`true`,后台线程会被中断。`isCancelled()`方法可用于检查任务是否被取消。 5. **版本兼容性问题** ...
如果任务尚未开始或正在运行,`mayInterruptIfRunning`参数决定是否立即中断。 - `isCancelled()`:检查任务是否已被取消。 - `isDone()`:检查任务是否已完成,包括正常完成、异常结束或被取消。 - `get()`:...
如果任务已经开始执行,则无法保证其会被立即停止,但可以通过`mayInterruptIfRunning`参数尝试中断正在运行的任务。 4. `get()`: 阻塞直到任务完成并返回结果。如果任务已取消,会抛出`CancellationException`;...