`
xinyiwust
  • 浏览: 13513 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FutureTask进入完成状态,会永远停止在这个状态

    博客分类:
  • java
阅读更多

      今天在使用ScheduledExecutorService的时候,发现scheduleWithFixedDelay和scheduleAtFixedRate的参数都是Runnable,于是想到使用FutureTask封装一下:FutureTask<String> task = new FutureTask<String>(new ComputeTask(1000));  

      接着在调用scheduleWithFixedDelay的时候就出现错误了,发现call函数只执行了一次,然后就卡住了。。。

随后查看了一下FutureTask的源码,发现执行完run之后state标记会由RUNNING变为RAN,所以第二次进入的时候就不会再执行了。也就是说,FutureTask进入完成状态,会永远停止在这个状态。

分享到:
评论

相关推荐

    futuretask用法及使用场景介绍

    FutureTask非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。例如,在一个Web应用中,需要对大量数据进行计算,而这些计算可能需要很长时间。如果使用同步计算,可能会导致主线程阻塞,而使用...

    FutureTask学习

    - 如果任务抛出异常,`FutureTask`会捕获这个异常并将其存储,以便在调用`get()`时重新抛出。 4. **示例代码**: ```java ExecutorService executor = Executors.newFixedThreadPool(1); Callable&lt;Integer&gt; ...

    揭密FutureTask.docx

    - `get()`和`get(long timeout, TimeUnit unit)`:这两个方法会阻塞当前线程,直到任务完成。如果任务已完成,它们会返回结果;如果任务被取消,抛出CancellationException;如果任务执行过程中发生异常,会抛出...

    spring线程池ThreadPoolExecutor配置以及FutureTask的使用

    这个类是Spring对Java内置的`java.util.concurrent.ThreadPoolExecutor`的封装,允许开发者在Spring应用上下文中声明式地定义线程池。在本篇文章中,我们将深入探讨`ThreadPoolTaskExecutor`的配置及其使用,并结合`...

    Java中的Runnable,Callable,Future,FutureTask的比较

    当你有一个Callable任务并希望将其作为线程执行时,可以创建一个FutureTask实例,然后将这个实例传递给Executor。 下面简要说明它们之间的关系和用法: - Runnable通常用于简单的任务,不关心结果的返回。 - ...

    FutureTask底层实现分析,有了FutureTask主线程要想获得工作线程(异步计算线程)的结果变得比较简单

    在 FutureTask 中,还有一个非常重要的变量,即 state,它用于记录当前任务的状态。state 的值可以是 NEW、COMPLETING、NORMAL、EXCEPTIONAL、INTERRUPTING、CANCELLED 等几种状态。不同的状态对应不同的任务状态,...

    FutureTask:FutureTask原始解析与重组-源码解析

    未来任务 FutureTask原始码解析 一,FutureTask是什么? FutureTask是可取消的异步的计算任务,它可以通过...任务返回值,正常返回时是泛型指定对象,任务异常时是Throwable对象,它在状态= COMPLETING阶段完成赋

    简谈java并发FutureTask的实现

    如果在任务执行过程中发生异常,`FutureTask`也会捕获并保存这个异常,供后续的`get()`方法抛出。 总结起来,`FutureTask`是Java并发编程中实现异步操作并获取结果的重要工具。它结合了`Runnable`和`Future`接口的...

    Java线程池FutureTask实现原理详解

    2、 线程池使用一个线程,执行这个FutureTask任务,线程执行任务过程比较简单,最终会调用Callable.call()或者是Runnable.run()方法,然后得到一个结果,把结果存储在FutureTask实例的outcome属性中,同时把状态修改...

    Java中Future、FutureTask原理以及与线程池的搭配使用

    - 使用`submit(Runnable/Callable)`提交有返回值的任务,这将返回一个`Future`对象,通过它可以获取结果或管理任务状态。 例如,对于`ExecutorService es`,执行`submit()`方法时,内部会将`Runnable`或`Callable`...

    Java 多线程与并发(17-26)-JUC线程池- FutureTask详解.pdf

    `FutureTask`持有这个任务的引用,在任务运行完成后会将其设置为已运行完毕状态。此外,`FutureTask`还包含了一些用于管理任务状态的变量,比如用于标记任务是否被取消的标志位等。 #### 六、应用场景 `FutureTask...

    Java FutureTask类使用案例解析

    3. FutureTask对象可以在计算完成后获取结果,可以通过isDone方法判断计算是否完成。 4. FutureTask对象可以提交给Executor执行,可以通过Executor的submit方法提交FutureTask对象。 FutureTask类的定义如下: ```...

    比较java中Future与FutureTask之间的关系

    4. `get()`: 获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回。 5. `get(long timeout, TimeUnit unit)`: 获取执行结果,如果在指定时间内,还没获取到结果,抛出java.util.concurrent....

    Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable

    在Android开发中,多线程是必不可少的一部分,特别是在执行耗时操作如网络请求、数据库操作等时,为了不阻塞主线程,我们会采用异步处理。`Future`、`FutureTask`、`Callable`和`Runnable`是Java并发编程中的核心...

    tiny-asyncload:动态代理+延迟加载+futureTask的一种应用思路

    FutureTask在完成时,它的`get()`方法可以被用来在需要的时候获取异步任务的结果。这样,我们可以在不影响主线程的情况下启动一个任务,然后在适当的时间点(如用户请求结果或者任务完成后通知用户)获取结果。这...

    futuretask源码分析(推荐)

    主要介绍了futuretask源码分析(推荐),小编觉得还是挺不错的,这里给大家分享下,供各位参考。

    多线程执行完后主程序再执行(包括需要子线程返回结果)

    注意,`cancel()`并不保证立即停止任务,而是设置了一个取消标志,如果任务尚未开始执行,或者正在执行的任务注意到这个取消标志,它可能会停止。 ```java futureTask.cancel(true); // true表示尝试中断正在运行...

    java多线程编程同步器Future和FutureTask解析及代码示例

    在`FutureTask`中,当我们调用`get()`方法时,它会确保任务已经完成(如果还未完成,就会阻塞等待)。如果任务被取消,`get()`会抛出`CancellationException`。`FutureTask`还提供了`run()`方法,可以直接在非线程池...

    Runnable、Callable、Future、FutureTask有什么关联.docx

    Runnable、Callable、Future、FutureTask有什么关联.docx

    Java多线程与并发系列22道高频面试题(附思维导图和答案解析)

    wait方法则是属于Object类中的,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify方法后本线程才进入对象锁定池准备,获取对象锁进入运行状态。 五、volatile关键字的作用 volatile关键字...

Global site tag (gtag.js) - Google Analytics