【多线程实现方案三:实现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.test;

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {

    private int number;

    public MyCallable(int number){
        this.number = number;
    }

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

        for(int x=1;x<=number;x++){
            sum +=x;
        }

        return sum;
    }
}
package com.test;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableTest {

    public static void main(String[] args) throws
            InterruptedException, ExecutionException {

        /**创建线程池对象*/
        ExecutorService pool = Executors.newFixedThreadPool(2);

        /**可以执行Runnable对象或者Callable对象代表的线程*/
        Future<Integer> f1 = pool.submit(new MyCallable(100));
        Future<Integer> f2 = pool.submit(new MyCallable(200));

        /**V get()*/
        Integer i1 = f1.get();
        Integer i2 = f2.get();
        System.out.println(i1);
        System.out.println(i2);

        /**结束*/
        pool.shutdown();

    }

}

运行结果:

5050
20100

原文地址:https://www.cnblogs.com/zuixinxian/p/9576490.html

时间: 2024-11-09 21:13:22

【多线程实现方案三:实现Callable 接口】的相关文章

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

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

多线程——实现Callable接口

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

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

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

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接口

目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Callable接口 1.主线程等待法 public class CycleWait implements Runnable{ private String value; @Override public void run() { try { Thread.currentThread().sleep(50

第五周作业(Java多线程创建的三个方法)

我最近在学习Java中多线程,并且觉得多线程这块在以后的Java开发中显得极为重要,就谈一下Java实现多线程的三种方式. JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没有返回值,只有第三种是带返回值的,这种方式一般要求比较高,并且较前两种难一些. 1.继承Thread类实现多线程继承Thread类的本质上也是实现了Runnable接口的一个实

【java多线程】多线程的创建三种方式--笔记

申明:线程的概念以及进程的相关概念,可以参考网络上其他资料,这里只讨论多线程是怎么实现. 一.多线程的简单理解 明白什么是多线程,小生通俗一点的理解为:在一个程序里,我想同时让这个程序完成多个任务. 比如:让主函数 main 在打印1~100之间的所有整数的时候,要求在主函数打印到 20 的时候,再运行另一个类里的程序,让它打印10~100之间的所有整数. 这里忽略同进程内的多线程之间的抢占时间问题,上面的举例需求是要求一个程序只要有发生同时运行俩个程序的情况就行,即不准出现无论程序跑多少次都是

Callable接口、Runable接口、Future接口

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

java多线程开启的三种方式

1.继承Thread类,新建一个当前类对象,并且运行其start()方法 1 package com.xiaostudy.thread; 2 3 /** 4 * @desc 第一种开启线程的方式 5 * @author xiaostudy 6 * 7 */ 8 public class Demo1_Thread extends Thread { 9 10 public void run() { 11 for (int i = 0; i < 10; i++) { 12 System.out.pri