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

Runnable Callable Future FutrueTask ExecutorService的关系

    博客分类:
  • java
阅读更多

 

public interface ExecutorService extends Executor {...}

ExecutorService#submit三个重载方法,之前一直没注意,今天仔细以研究,还是有好些知识点的

1.第一个就不说了

<T> Future<T> submit(Callable<T> task);

 

2.返回的future#get会阻塞,得到的结果就是result

<T> Future<T> submit(Runnable task, T result);

 

3.future#get也是会阻塞的,只是返回的结果是null

Future<?> submit(Runnable task);

 

a.FutureTask是Future的唯一实现

public class FutureTask<V> implements RunnableFuture<V> {...}

public interface RunnableFuture<V> extends Runnable, Future<V> {...}

 

code demo

ExecutorService executor = Executors.newSingleThreadExecutor();

Future future = executor.submit(new Runnable() {
    public void run() {
        System.out.println("run");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});
System.out.println(future.get());

final List<String> list = Lists.newArrayList("a", "b");
Future future2 = executor.submit(new Runnable() {
    public void run() {
        list.add("c");
        System.out.println("run with result");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}, list);
System.out.println(future2.get());

executor.shutdown();

 
执行结果

run
null
run with result
[a, b, c]

 

 

分享到:
评论

相关推荐

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

    在实际开发中,ExecutorService(如ThreadPoolExecutor)经常与Future和FutureTask一起使用,因为ExecutorService可以提交Runnable或Callable任务,并返回Future,从而实现对任务的异步处理和结果获取。例如: ```...

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

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

    详解JDK中ExecutorService与Callable和Future对线程的支持

    Java并发编程中的ExecutorService、Callable和Future Java并发编程中,ExecutorService、Callable和Future是三大核心组件,它们之间紧密相连,共同实现了高效、安全的并发编程。下面我们将详细介绍这些组件的作用和...

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

    总结一下,`Runnable`用于无返回值的简单任务,`Callable`用于有返回值的任务,`Future`作为结果的容器,而`FutureTask`则将两者结合,使得`Callable`的任务可以通过`ExecutorService`执行。在实际开发中,根据需求...

    MapReduce,泛型,匿名内部类,Runnable和Callable

    Future&lt;Integer&gt; future = executorService.submit(new Callable() { @Override public Integer call() throws Exception { return someComputation(); } }); ``` 在上述代码中,executorService是...

    Callable和Future.doc

    Callable 和 Future 是 Java 多线程编程中两个重要的接口,它们在处理异步计算和结果获取方面发挥着关键作用。Callable 与 Runnable 相似,但具有更强大的功能,允许任务返回结果并处理异常。 Callable 接口: ...

    java并发包之Callable和Future

    `Callable`和`Future`的组合是Java并发包中一个强大的工具,它弥补了`Runnable`接口的不足,使得异步编程可以获取到返回值并处理异常。同时,`ExecutorService`作为线程池的实现,为并发编程提供了一种优雅的解决...

    Java多线程Callable和Future接口区别

    在JavaSE5中引入的Callable是一个具有类型参数的范型,他的类型参数方法表示为方法call()而不是run()中返回的值,并且必须使用ExecutorService.submint()方法进行调用。 Callable接口规定的方法是call(),而...

    JAVA中Callable的使用

    `FutureTask`是`Future`的一个具体实现,它同时也是一个`Runnable`,可以直接提交给ExecutorService。`FutureTask`的构造函数接受一个Callable对象,当任务执行完成后,可以通过`FutureTask`的`get()`方法获取结果。...

    Java多线程实现的四种方式

    在Java中,实现多线程有四种主要方法:继承Thread类、实现Runnable接口、使用ExecutorService和使用Callable与Future。下面将详细探讨这四种方式。 1. 继承Thread类 在Java中,我们可以直接继承Thread类并重写其run...

    浅谈在Java中使用Callable、Future进行并行编程

    FutureTask是Future接口的一个具体实现,它同时实现了Runnable接口,因此可以提交给ExecutorService执行。FutureTask有两个构造函数,分别接受Callable和Runnable对象,以及一个可选的结果值。 下面是一个使用...

    Callable:Callable与Future在Web应用中的优化案例

    与Runnable接口不同,Callable可以有返回值,而且能够抛出异常。当我们需要在线程执行过程中获取某些计算结果时,Callable就非常适用。下面是一个简单的Callable示例: ```java public class MyTask implements ...

    java8源码-concurrency:java并发总结

    Runnable Callable Future ExecutorService Class Thread FutureTask FutureTask 获取线程执行结果的原理:以 ThreadPoolExecutor 为例(实现 ExecutorService 接口), 其 submit() 方法提交任务, 返回 一个 ...

    java Callable与Future的详解及实例

    Callable 接口类似 Runnable,但提供了更丰富的功能,而 Future 对象则用于管理和控制异步计算的结果。 **Callable 接口** Callable 接口与 Runnable 相比,具有以下特点: 1. **方法不同**:Callable 接口中定义了...

    Java concurrency线程池之Callable和Future_动力节点Java学院整理

    Callable、Future、FutureTask之间的关系 RunnableFuture是一个接口,它继承了Runnable和Future这两个接口。RunnableFuture的源码如下: public interface RunnableFuture&lt;V&gt; extends Runnable, Future&lt;V&gt; { void...

    TimeoutExample:使用 Future 和 ExecutorService 进行死代码上升的超时示例

    使用`submit()`方法可以将Runnable或Callable任务提交给`ExecutorService`,并返回一个`Future`对象。 在处理可能会阻塞或运行时间过长的任务时,`Future`和`ExecutorService`的组合特别有用。例如,如果你需要从...

    ExecutorService的execute和submit方法

    它有两种重载形式:`Future&lt;?&gt; submit(Runnable task)`和`&lt;T&gt; Future&lt;T&gt; submit(Callable&lt;T&gt; task)`。这两种形式的主要区别在于,`Callable`任务可以有返回值,而`Runnable`任务没有。`submit()`方法会将任务提交到...

    Executor,Executors,ExecutorService比较.docx

    - **submit(Callable)**:提交一个`Callable`任务,同样返回`Future`对象,`Callable`的任务可以有返回值。 - **invokeAny**(Collection&lt;Callable&lt;T&gt;&gt; tasks)**:在给定的任务列表中,选择并执行一个任务,返回其...

    详解Java Callable接口实现多线程的方式

    ExecutorService是一个高级的线程池管理器,提供了多种submit()方法来提交Runnable或Callable任务。使用ExecutorService可以实现多线程执行任务,并获取执行结果。 六、Callable和Future的应用场景 Callable和...

Global site tag (gtag.js) - Google Analytics