GUC-6 Callable 接口

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/*
 * 一、创建执行线程的方式三:实现 Callable 接口。 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常。
 *
 * 二、执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。  FutureTask 是  Future 接口的实现类
 */
public class TestCallable {

    public static void main(String[] args) {
        ThreadDemo td = new ThreadDemo();

        //1.执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。
        FutureTask<Integer> result = new FutureTask<>(td);

        new Thread(result).start();

        //2.接收线程运算后的结果
        try {
            Integer sum = result.get();  //FutureTask 可用于 闭锁
            System.out.println(sum);
            System.out.println("------------------------------------");
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }

}

class ThreadDemo implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        int sum = 0;

        for (int i = 0; i <= 100000; i++) {
            sum += i;
        }

        return sum;
    }

}

/*class ThreadDemo implements Runnable{

    @Override
    public void run() {
    }

}*/

原文地址:https://www.cnblogs.com/surge/p/10476242.html

时间: 2024-11-10 15:08:59

GUC-6 Callable 接口的相关文章

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

Java多线程之Callable接口的实现

import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /*  * 一.创建执行线程的方式三:实现 Callable 接口. 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常.  *  * 二.执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运