`

java callable疑惑:

阅读更多
看了 线程持的源码和Futuretask的源码终于明白了
FutureTask 里面哟个内部类:Sync 这个内部类中包含了
private volatile Thread runner; 这样的一个定义
和      private V result; 的定义 我就明白了
在使用callable的时候最后还是会使用runnable这个接口

  void innerRun() {
            if (!compareAndSetState(READY, RUNNING))
                return;

            runner = Thread.currentThread();//获取当前线程
            if (getState() == RUNNING) { // recheck after setting thread
                V result;
                try {
                    result = callable.call();
                } catch (Throwable ex) {
                    setException(ex);
                    return;
                }
                set(result);// 将得到的值赋值给 private V result; 这个变量
            } else {
                releaseShared(0); // cancel
            }
        }


在看看线程池的原理:
    /**
     * @throws RejectedExecutionException {@inheritDoc}
     * @throws NullPointerException       {@inheritDoc}
     */
    public <T> Future<T> submit(Callable<T> task) {
        if (task == null) throw new NullPointerException();
        RunnableFuture<T> ftask = newTaskFor(task);
        execute(ftask);
        return ftask;
    }
在 submit 中会实现一个RunnableFuture, 而Futuretask实现了RunnableFuture的接口!
分享到:
评论

相关推荐

    JAVA中Callable的使用

    例如,你可以创建一个计算平方根的Callable: ```java import java.util.concurrent.Callable; public class SquareRootCallable implements Callable&lt;Double&gt; { private double number; public ...

    Java使用Callable和Future创建线程操作示例

    "Java使用Callable和Future创建线程操作示例" Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作...

    java callable(多线程)

    ### Java Callable与多线程详解 在Java编程中,`Callable`接口是处理多线程问题的一个重要概念,尤其在需要从线程中返回结果的情况下。`Callable`接口与我们熟知的`Runnable`接口相似,但功能更加强大,主要体现在...

    Java Callable接口实现细节详解

    "Java Callable接口实现细节详解" Java Callable接口是 Java 中的一个重要接口,它提供了一个通用的方法来执行异步任务,并且可以获取任务的执行结果。下面将详细介绍 Java Callable 接口的实现细节。 Callable ...

    java高手真经:网络开发卷源码

    2. **IO流与NIO**:Java IO流用于数据的读写,包括字节流、字符流、对象流等,而NIO(New IO)提供了非阻塞的I/O操作,适用于高并发的网络应用。NIO引入了选择器(Selector)和通道(Channel),可以实现多路复用,提高...

    基于Java Callable接口实现线程代码实例

    基于Java Callable接口实现线程代码实例 Java Callable接口简介 Java Callable接口是Java中的一种特殊接口,用于实现线程的返回值。该接口提供了一个call()方法,该方法可以返回一个值,用于获取线程执行的结果。 ...

    java并发包之Callable和Future

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

    Java并发编程:设计原则与模式(第二版).rar

    2. **Java并发API**:Java提供了丰富的并发API,如`Thread`、`Runnable`、`ExecutorService`和`Future`等。这些API是Java并发编程的核心,书中会详细解析它们的使用方法和应用场景。 3. **线程安全**:线程安全是...

    Java多线程Callable接口

    在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示的是从方法call()中返回的值,并且必须使用ExecutorService.submit()方法调用它。 import java.util.ArrayList; import java.util....

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

    Java Callable接口实现多线程的方式详解 Java Callable接口是Java 1.5中引入的一种多线程实现方式,用于解决传统线程创建方式的缺陷。 Callable接口和Future接口的组合使用,能够实现多线程并发执行任务,并获取...

    Java并发编程:设计原则与模式(Concurrent.Programming.in.Java)(中英版)

    6. **future模式**:用于异步计算结果,`Future`接口和`Callable`接口提供了未来获取结果的机制,如`ExecutorService`的`submit()`方法返回`Future`。 7. **线程局部变量模式**:每个线程拥有独立的变量副本,避免...

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

    在Java编程中,Callable接口和Future接口是多线程编程中的重要工具,它们在Web应用程序的性能优化中扮演着关键角色。本篇文章将深入探讨Callable和Future如何在Web应用中提高效率并优化资源利用。 Callable接口是...

    总结了Thread-Callable-Future的小demo

    自留demo,主要是Thread-Callable-Future的基本实现。 参考文章: 1、深入理解Callable ...2、彻底理解Java的Future模式: https://www.cnblogs.com/cz123/p/7693064.html

    【Java】Callable创建线程用到的适配器模式(csdn)————程序.pdf

    在Java编程中,多线程是并发处理任务的关键机制,Callable接口和FutureTask类是Java提供的用于创建具有返回值的线程的重要工具。本文将详细解释Callable接口的使用、适配器模式在创建线程中的应用,以及FutureTask在...

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

    `Future`、`FutureTask`、`Callable`和`Runnable`是Java并发编程中的核心接口和类,它们在Android开发中同样有着广泛的应用。下面将详细介绍这些概念以及它们如何协同工作。 1. `Runnable`: 这是Java中最基础的多...

    Java Lambda表达式:简化代码与增强表达力的利器

    Lambda表达式在Java 8的很多新特性中都扮演着重要角色,尤其是在`java.util.function`包中的一系列函数式接口中,如`Runnable`、`Callable`、`Supplier`、`Consumer`、`Function`等。这些接口的设计初衷就是为了让...

    java并发编程:Executor、Executors、ExecutorService.docx

    Java并发编程中的Executor、Executors和ExecutorService是Java并发编程框架的重要组成部分,它们为开发者提供了高效管理和控制线程执行的工具。以下是对这些概念的详细解释: 1. Executor: Executor是一个接口,它...

    Django错误:TypeError at / 'bool' object is not callable解决

    主要介绍了Django 错误:TypeError at / 'bool' object is not callable解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java并发编程:设计与模式

    例如,`Executor`框架简化了多线程任务的执行,而`Future`和`Callable`接口则用来处理异步任务的执行结果。阻塞队列如`ArrayBlockingQueue`和`LinkedBlockingQueue`支持在多线程环境下生产者和消费者之间的数据传递...

Global site tag (gtag.js) - Google Analytics