5、JUC--实现 Callable 接口

Callable接口

? Java 5.0 在 java.util.concurrent 提供了一个新的创建执行
  线程的方式:Callable 接口

? Callable 接口类似于 Runnable,两者都是为那些其实例可
  能被另一个线程执行的类设计的。但是 Runnable 不会返
  回结果,并且无法抛出经过检查的异常。

? Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁

创建执行线程的方法有四种:

1、继承Thread类或者创建线程类

2、通过实现Runable接口创建线程类

3、通过Callable接口

4、通过线程池创建线程

相对于Runable接口的不同:

可以使用泛型,方法可以有返回值没并且可以抛出异常

实例:

public class TestCallabel {

public static void main(String[] args) {
    ThreadDemoCallable tc = new ThreadDemoCallable();

    //此时的使用方式有些不同
    //1、需要FutureTask实现类的支持,用于接收运算结果
    FutureTask<Integer> result = new FutureTask<>(tc);

    new Thread(result).start();
    //2、接收运算的结果
    //注意:只有上述的线程之后下方的代码才会执行----闭锁
    try {
        Integer sum = result.get();
        System.out.println(sum);
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}

}

//可以使用泛型
class ThreadDemoCallable implements Callable<Integer>{
    @Override
    public Integer call() throws Exception {
        //计算整合
        int sum = 0;
        for(int i = 0;i <10;i++){
            sum +=i;
        }
        return sum;
    }
}

效率高

可以实现和闭锁一样的实现功能

原文地址:https://www.cnblogs.com/Mrchengs/p/10793688.html

时间: 2024-11-09 23:21:26

5、JUC--实现 Callable 接口的相关文章

创建执行线程方式三:实现Callable接口

Callable接口 ① Java 5.0 在 java.util.concurrent 提供了一个新的创建执行 线程的方式:Callable 接口② Callable 接口类似于 Runnable,两者都是为那些其实例可 能被另一个线程执行的类设计的. 但是 Runnable 不会返 回结果,并且无法抛出经过检查的异常.③ Callable 需要依赖FutureTask ,FutureTask 也可以用作闭 锁 TestCallable package com.aff.juc; import

java多线程 -- 创建线程的第三者方式 实现Callable接口

Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的.但是 Runnable 不会返回结果,并且无法抛出经过检查的异常.Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁. 例子: package com.company; import java.util.concurrent.Callable;

Java Callable接口——有返回值的线程

实际开发过程中,我们常常需要等待一批线程都返回结果后,才能继续执行.<线程等待--CountDownLatch使用>中我们介绍了CountDownLatch的使用,通过使用CountDownLatch,可以实现线程等待. JDK 1.8实现了一种更好的方式,实现线程等待与获取线程返回值,那就是Callable接口,下面我们来看看具体代码. package com.coshaho.learn; import java.util.Random; import java.util.concurren

从线程中产生返回值--Callable接口

Runnable是执行工作的独立线程,但是它不返回任何值.如果你希望线程在完成时能够返回一个值,那么可以实现Callable接口而不是Runnable接口.在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示的是从方法call()(而不是run())中返回的值,并且必须使用ExecutorService.submit()方法调用它. 线程代码: public class ResulttThread implements Callable<String> { pr

线程池的应用及Callable接口的使用

Java代码   public interface Executor { /** * Executes the given command at some time in the future.  The command * may execute in a new thread, in a pooled thread, or in the calling * thread, at the discretion of the <tt>Executor</tt> implementa

java中的Callable接口

一.概述 该接口位于java.util.concurrent包下,声明:public interface Callable<V>      V - call 方法的结果类型 返回结果并且可能抛出异常的任务.实现者定义了一个不带任何参数的叫做 call 的方法.Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的.但是 Runnable 不会返回结果,并且无法抛出经过检查的异常.Executors 类包含一些从其他普通形式转换成 Callable 类

多线程——实现Callable接口

前两篇博客(多线程--继承Thread类,多线程--实现Runnable接口 )介绍了java使用线程的两种方法,这篇博客继续介绍第三种方法--实现Callable接口. 先说一下Runnable和Callable的区别: 1.Callable规定的方法是call(),Runnable规定的方法是run(). 2.Callable的任务执行后可返回值,而Runnable的任务是不能返回值得 3.call方法可以抛出异常,run方法不可以 4.运行Callable任务可以拿到一个Future对象,

Callable接口、Runable接口、Future接口

1. Callable与Runable区别 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理.Thread类.Runnable接口和Java内存管理模型使得多线程编程简单直接. 但Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值.没有返回值这点稍微有点麻烦.不能声明抛出检查型异常则更麻烦一些. public void run()方法契约意味着你必须捕获并处理检查型异常.即使你小心地保存了异常信息(在捕获异常时)以便稍后检查,但也

Java总结(十一)——通过Callable接口实现多线程,生产者消费者问题,多线下载(复制)文件

一.通过Callable接口实现多线程 1.Callable接口介绍: (1)java.util.concurrent.Callable是一个泛型接口,只有一个call()方法 (2)call()方法抛出异常Exception异常,且返回一个指定的泛型类对象 2.Callable接口实现多线程的应用场景 (1)当父线程想要获取子线程的运行结果时 3.使用Callable接口实现多线程的步骤 (1)第一步:创建Callable子类的实例化对象 (2)第二步:创建FutureTask对象,并将Cal

【多线程实现方案三:实现Callable 接口】

多线程实现的方式三: A:创建一个线程池对象,控制要创建几个线程对象. public static ExecutorService newFixedThreadPool(int nThreads) B:做一个类实现Callable接口. C:调用如下方法即可 Future<?> submit(Runnable task) <T> Future<T> submit(Callable<T> task) D:我就要结束,可以吗? 可以. package com.t