0 0

关于Future.cancel(mayInterruptIfRunning)方法的参数的问题5

Future提供cancel方法来支持取消一个任务。它携带一个boolean的参数,这个参数在true和false的情况下有什么不同呢?

似乎都是通过设置中断标志来结束一个任务啊。。。求详解。
2011年12月25日 16:00

1个答案 按时间排序 按投票排序

0 0

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

相关推荐

    Callable和Future.doc

    1. `boolean cancel(boolean mayInterruptIfRunning)`:此方法用于尝试取消任务的执行。如果 `mayInterruptIfRunning` 为 true,那么正在执行的任务会被立即中断;如果为 false,那么只有当任务已完成或可取消时才会...

    Java多线程之异步Future机制的原理和实现共5页.p

    如果任务尚未开始或者正在运行,mayInterruptIfRunning参数决定是否中断正在执行的任务。 异步Future机制通常与ExecutorService和Callable接口一起使用。ExecutorService是一个线程池服务,可以提交任务并管理它们...

    CallableFuture简介-动力节点共16页.pd

    mayInterruptIfRunning参数决定是否中断正在运行的任务。 4. **isDone()**: 检查任务是否已完成。 5. **isCancelled()**: 检查任务是否已被取消。 6. **call()**: 返回结果的方法,允许抛出异常。 **使用场景** ...

    ScheduledExecutorService 计时器任务处理

    3. 任务取消:可以通过`Future.cancel(boolean mayInterruptIfRunning)`方法取消正在执行的任务,如果`mayInterruptIfRunning`为true,会尝试中断正在运行的任务。 了解和熟练使用ScheduledExecutorService对于提高...

    线程超时死掉

    解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...

    简析Java中的util.concurrent.Future接口

    4. `cancel(boolean mayInterruptIfRunning)`:此方法用于尝试取消正在进行的计算。如果`mayInterruptIfRunning`为`true`,则会尝试中断正在执行的计算任务。如果任务尚未开始,或者可以安全地取消,`cancel()`方法...

    java超时控制

    `FutureTask`类也支持超时控制,通过`FutureTask.cancel(boolean mayInterruptIfRunning)`方法可以尝试取消正在执行的任务,并且可以选择是否中断正在运行的线程。 8. **自定义超时策略** 对于更复杂的场景,可能...

    java Callable与Future的详解及实例

    3. **取消任务**:`cancel(boolean mayInterruptIfRunning)` 方法可以取消任务执行。`mayInterruptIfRunning` 参数决定是否立即中断正在执行的任务。 4. **判断是否已取消**:`isCancelled()` 方法用于检查任务是否...

    java自定义任务类定时执行任务示例 callable和future接口使用方法

    - `cancel(boolean mayInterruptIfRunning)`:尝试取消任务,参数决定是否中断正在执行的任务。 在示例中,我们调用`future1.get()`获取第一个任务的结果,然后在等待5秒后尝试取消第二个任务(`future2.cancel...

    JAVA异步通信教程

    此外,还可以通过`.isDone()`方法检查操作是否完成,以及通过`.cancel(boolean mayInterruptIfRunning)`方法取消未完成的操作。 ##### 4.2 客户端设置 客户端需要创建一个`AsynchronousSocketChannel`并尝试与...

    AsyncTask.rar

    当不再需要任务时,可以通过`cancel(boolean mayInterruptIfRunning)`方法取消。如果`mayInterruptIfRunning`为`true`,后台线程会被中断。`isCancelled()`方法可用于检查任务是否被取消。 5. **版本兼容性问题** ...

    Java8新的异步编程方式CompletableFuture实现

    如果任务尚未开始或正在运行,`mayInterruptIfRunning`参数决定是否立即中断。 - `isCancelled()`:检查任务是否已被取消。 - `isDone()`:检查任务是否已完成,包括正常完成、异常结束或被取消。 - `get()`:...

    简谈java并发FutureTask的实现

    如果任务已经开始执行,则无法保证其会被立即停止,但可以通过`mayInterruptIfRunning`参数尝试中断正在运行的任务。 4. `get()`: 阻塞直到任务完成并返回结果。如果任务已取消,会抛出`CancellationException`;...

Global site tag (gtag.js) - Google Analytics