Java使用Callable接口实现多线程的实例代码

 更新时间:2023年08月26日 10:07:41   作者:Rooker  
这篇文章主要介绍了Java使用Callable接口实现多线程的实例代码,实现Callable和实现Runnable类似,但是功能更强大,具体表现在可以在任务结束后提供一个返回值,Runnable不行,call方法可以抛出异,Runnable的run方法不行,需要的朋友可以参考下

通过Callable接口实现多线程

实现Callable重写call方法

实现Callable和实现Runnable类似,但是功能更强大,具体表现在

  • 可以在任务结束后提供一个返回值,Runnable不行
  • call方法可以抛出异常,Runnable的run方法不行
  • 可以通过运行Callable得到的Fulture对象监听目标线程调用call方法的结果,得到返回值,(fulture.get(),调用后会阻塞,直到获取到返回值)

1.Callable接口介绍:

(1)java.util.concurrent.Callable是一个泛型接口,只有一个call()方法

(2)call()方法抛出异常Exception异常,且返回一个指定的泛型类对象

2.Callable接口实现多线程的应用场景

当父线程想要获取子线程的运行结果时

3.使用Callable接口实现多线程的步骤

(1)第一步:创建Callable子类的实例化对象

(2)第二步:创建FutureTask对象,并将Callable对象传入FutureTask的构造方法中(注意:FutureTask实现了Runnable接口和Future接口)

 (3)第三步:实例化Thread对象,并在构造方法中传入FurureTask对象

 (4)第四步:启动线程

例1(利用Callable接口实现线程)

利用Callable接口创建子线程类:

package com.my.frame;
import java.util.concurrent.Callable;
public class ThreadCall implements Callable<String> {
    @Override
    public String call() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("=====");
        return "9999";
    }
}
package com.my.frame;
import java.util.concurrent.FutureTask;
public class TestThread {
    public static void main(String[] args) {
        FutureTask<String> ft = new FutureTask<>(new ThreadCall());
        new Thread(ft).start();
    }
}

例2(匿名类部类实现Callable接口创建子线程)

匿名类部类实现Callable接口创建子线程类并实现:

package call;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
//匿名类部类实现Callable接口创建子线程
public class AnonyCallable {
    public static void main(String[] args) {
    Callable<String> cl = new Callable<String>() {
    @Override
    public String call() throws Exception {
            System.out.println(Thread.currentThread().getName() + "正在行军~~~");
            System.out.println(Thread.currentThread().getName() + "遭遇敌军~~~");
            System.out.println(Thread.currentThread().getName() + "奋勇杀敌!!!!");
            return "战斗胜利,俘虏敌军50000人";
            }
};
        FutureTask<String> ft = new FutureTask(cl);
        new Thread(ft, "李存孝部队").start();
try {
        Thread.currentThread().setName("李存勖部队");
        Thread.sleep(3000);
        System.out.println(Thread.currentThread().getName() + "休整3000ms");
} catch (InterruptedException e) {
    e.printStackTrace();
}
    System.out.println(Thread.currentThread().getName() + "整顿完毕,等待友军消息...");
try {
            String str = ft.get();
            System.out.println("李存勖部队得知友军消息为:" + str);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
    }
}
}

到此这篇关于Java使用Callable接口实现多线程的实例代码的文章就介绍到这了,更多相关Java使用Callable接口实现多线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBean依赖和三级缓存的案例讲解

    SpringBean依赖和三级缓存的案例讲解

    这篇文章主要介绍了SpringBean依赖和三级缓存的案例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • java1.5中访问环境变量

    java1.5中访问环境变量

    这篇文章主要介绍了如何在java1.5中访问环境变量,使用System.getenv()可以访问环境变量
    2014-01-01
  • 如何去除Java中List集合中的重复数据

    如何去除Java中List集合中的重复数据

    这篇文章主要介绍了Java中List集合去除重复数据的方法,对大家的工作或学习有一定价值,有需求的朋友可以参考下
    2020-05-05
  • Java多线程编程中synchronized线程同步的教程

    Java多线程编程中synchronized线程同步的教程

    Java的synchronized关键字可以修饰方法和对象来构建线程间的同步,这里我们就来共同学习Java多线程编程中synchronized线程同步的教程:
    2016-07-07
  • java 算法之冒泡排序实例详解

    java 算法之冒泡排序实例详解

    这篇文章主要介绍了java 算法之冒泡排序实例详解的相关资料,冒泡排序,就是模仿泡泡从水中浮起跑到水面的过程需要的朋友可以参考下
    2017-07-07
  • 浅谈Spring Bean的基本配置

    浅谈Spring Bean的基本配置

    这篇文章主要介绍了浅谈Spring Bean的基本配置,文中有非常详细的代码示例,对正在学习java Spring的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot实现EMQ设备的上下线告警

    SpringBoot实现EMQ设备的上下线告警

    EMQX 的上下线系统消息通知功能在客户端连接成功或者客户端断开连接,需要实现设备的上下线状态监控,所以本文给大家介绍了如何通过SpringBoot实现EMQ设备的上下线告警,文中有详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • skywalking自定义链路追踪与日志采集的过程

    skywalking自定义链路追踪与日志采集的过程

    这篇文章主要介绍了skywalking自定义链路追踪与日志采集,演示了如何在微服务中自定义方法级的链路追踪,以及通过自定义输出格式的日志上报到skywalking的完整过程,需要的朋友可以参考下
    2024-02-02
  • 解决Spring Data Jpa 实体类自动创建数据库表失败问题

    解决Spring Data Jpa 实体类自动创建数据库表失败问题

    这篇文章主要介绍了解决Spring Data Jpa 实体类自动创建数据库表失败问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 一文详解Spring是怎样处理循环依赖的

    一文详解Spring是怎样处理循环依赖的

    循环依赖简单理解就是A,B 两个bean相互依赖,A依赖B,B依赖A,A->B、B->A大概就是这样,这篇文章主要介绍了Spring是怎样处理循环依赖的,文中通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01

最新评论