Java多线程09—实现Callable接口创建线程

简介: Java多线程09—实现Callable接口创建线程

实现Callable接口创建线程

@[toc]
(JDK5.0新增的线程创建方式)

  • 与使用Runnable相比, Callable功能更强大些
  1. 相比run()方法,可以有返回值
  2. 方法可以抛出异常
  3. 支持泛型的返回值 (后续专门有文章讲解泛型)
  4. 需要借助FutureTask类,比如获取返回结果
  • Future接口
  1. 可以对具体Runnable、Callable任务的执行结果进行取消、查询是 否完成、获取结果等。
  2. FutrueTask是Futrue接口的唯一的实现类
  3. FutureTask 同时实现了Runnable, Future接口。它既可以作为 Runnable被线程执行,又可以作为Future得到Callable的返回值

具体步骤在代码注释之中

代码:

package com.jsm.java2;

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

/*
创建线程的方式三:实现Callable接口
步骤:


 */
public class ThreadNew {
    public static void main(String[] args) {
        //3.创建Callable接口实现类的对象
        NumThread n1 = new NumThread();
        //4.将此Callable接口实现类的对象作为传递到FutureTest构造器中,创建FutureTask的对象
        FutureTask f1 = new FutureTask(n1);
        //5.将FutureTask的对象传递到Thread类的构造器中,创建Thread对象并且调用start方法
        new Thread(f1).start();//启动线程
        try {
            //6.获取Callable中call方法的返回值
            //get方法返回值即为FutureTask构造器参数callable实现类重写的的call方法的返回值。
            Object sum = f1.get();
            System.out.println("总和为:"+sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
//1. 创建一个实现Callable的实现类
class NumThread implements Callable {

    //2. 实现call方法,将此线程需要执行的操作声明在call中
    @Override//快捷键:输入call然后回车
    public Object call() throws Exception {
        int sum =0;
        for (int i = 0; i <=100; i++) {
            if (i%2==0){
                System.out.println(i);
                sum+=i;
            }
        }
        //如果不需要返回值就return一个null
        return sum;//多态
    }
}
目录
相关文章
|
3天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
1天前
|
消息中间件 监控 安全
【JAVAEE学习】探究Java中多线程的使用和重点及考点
【JAVAEE学习】探究Java中多线程的使用和重点及考点
|
1天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
3天前
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?
|
4天前
|
缓存 Java
Java并发编程:深入理解线程池
【4月更文挑战第26天】在Java中,线程池是一种重要的并发工具,它可以有效地管理和控制线程的执行。本文将深入探讨线程池的工作原理,以及如何使用Java的Executor框架来创建和管理线程池。我们将看到线程池如何提高性能,减少资源消耗,并提供更好的线程管理。
|
5天前
|
Java UED
Java并发编程:理解并应用线程池
【4月更文挑战第25天】在处理并发问题时,线程池是Java中一种重要的工具。本文将探讨线程池的概念、优势以及如何在Java程序中有效地使用它。我们将详细解释线程池的工作原理,并通过示例来使其更加易于理解。
|
5天前
|
监控 Java 调度
Java多线程实战-从零手搓一个简易线程池(四)线程池生命周期状态流转实现
Java多线程实战-从零手搓一个简易线程池(四)线程池生命周期状态流转实现
|
2月前
|
存储 Java
高并发编程之多线程锁和Callable&Future 接口
高并发编程之多线程锁和Callable&Future 接口
28 1
|
2月前
|
Java
Java并发编程:理解并使用Future和Callable接口
【2月更文挑战第25天】 在Java中,多线程编程是一个重要的概念,它允许我们同时执行多个任务。然而,有时候我们需要等待一个或多个线程完成,然后才能继续执行其他任务。这就需要使用到Future和Callable接口。本文将深入探讨这两个接口的用法,以及它们如何帮助我们更好地管理多线程。
|
6月前
|
Java
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
34 0