文章目录

  • 前言
  • 一、实现Callable接口
  • 二、代码示例
    • 1.Callable接口实现多线程
  • 总结

前言

上一篇我们共同认识了并发问题,那么本篇我们将一起来学习Callable接口实现多线程。


一、实现Callable接口

上篇内容我们通过实现Runnable实现多线程,本篇我们将学习如何继承java中的Callable来实现多线程。
操作步骤:

  1. 实现Callable接口,需要返回值。
  2. 重写call()方法,需要抛出异常。
  3. 创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);
  4. 提交执行: Future r1 = ser.submit(t1);
  5. 获取结果:boolean rs1 = r1.get();
  6. 关闭服务:ser.shutdownNow();

二、代码示例

1.Callable接口实现多线程

代码如下(示例):
TestCallable类

public class TestCallable implements Callable<Boolean> {private String url;private String name;public TestCallable(String url, String name) {this.url = url;this.name = name;}@Overridepublic Boolean call() {WebDownLoader03 webDownLoader = new WebDownLoader03();webDownLoader.downloader(url,name);System.out.println("下载的文件名:"+name);return true;}public static void main(String[] args) throws ExecutionException, InterruptedException {TestCallable t1 = new TestCallable("https://up.tt98.com/uploadfile/sjbz/2020-11-11/c57c4f2e092bf23ec0c8e940664d6572.jpg","1.jpg");TestCallable t2 = new TestCallable("https://up.tt98.com/uploadfile/sjbz/2020-11-11/c57c4f2e092bf23ec0c8e940664d6572.jpg","2.jpg");TestCallable t3 = new TestCallable("https://up.tt98.com/uploadfile/sjbz/2020-11-11/c57c4f2e092bf23ec0c8e940664d6572.jpg","3.jpg");//创建执行服务ExecutorService ser = Executors.newFixedThreadPool(3);//提交执行Future<Boolean> r1 = ser.submit(t1);Future<Boolean> r2 = ser.submit(t2);Future<Boolean> r3 = ser.submit(t3);//获取结果boolean rs1 = r1.get();boolean rs2 = r2.get();boolean rs3 = r3.get();//关闭服务ser.shutdownNow();}
}

WebDownLoader03类

//下载器
class WebDownLoader03{//下载方法public void downloader(String url,String name){try {FileUtils.copyURLToFile(new URL(url),new File(name));}catch (IOException e){e.printStackTrace();System.out.println("IO异常,downloader方法出现异常。");}}
}

运行结果:


总结

第五篇、Callable接口实现多线程相关推荐

  1. java callable 详解_详解Java Callable接口实现多线程的方式

    在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求 ...

  2. 实现Callable接口创建多线程

    新增方式一:实现Callable接口 与Runnable相比,Callable功能更强大些 相比run()方法,可以有返回值 方法可以抛出异常 支持泛型的返回值 需要借助FutureTask类,比如获 ...

  3. 多线程-Callable接口

    通过实现Callable接口实现多线程. 环境:IntelliJ IDEA.JDK1.8 步骤 自定义类,实现Callable接口,需要返回值(call方法) 实现call()方法,编写线程执行体(可 ...

  4. JavaSE基础二十:Java 多线程(线程基础知识、Java 多线程、Java 实现多线程(继承 Thread 类、实现 Runnable 接口、实现 Callable 接口))

    本章目录 1.基础知识准备 2.Java 多线程概述 3.Java 实现多线程 3.1.继承 Thread 类 如何开启新线程 Thread 类常用方法 多线程中的同步 Thread 类同步方法 多线 ...

  5. Callable 接口实现java 的多线程

    java 中创建多线程最常见的是继承Thread 的子类重写run() 方法,还有就是实现Runnable 接口 我们最好使用实现了Runnable 接口的方法原因有两点: ①因为java 的单继承的 ...

  6. Callable 接口

    Callable 接口 是 java.util.concurrent.下的一个泛型接口 , 只有一个call () 方法 , 它是有返回值的 ,  我们可以获取多线程执行的结果 , 使用 Callab ...

  7. 认识Callable接口

    认识Callable接口 Runnable接口和Callable接口的不同 callable接口,1.可以有返回值,2.可以抛出异常,3.调用方法不同, Runnable接口不可以 实现Callabl ...

  8. 多线程——实现Callable接口

    前两篇博客(多线程--继承Thread类.多线程--实现Runnable接口 )介绍了java使用线程的两种方法.这篇博客继续介绍第三种方法--实现Callable接口. 先说一下Runnable和C ...

  9. 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

    秒杀多线程第十五篇 关键段,事件,互斥量,信号量的"遗弃"问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回 ...

最新文章

  1. 使用C++ ostringstream来格式化字符串输出
  2. 谷歌兄弟公司Wing将于10月开始试点无人机配送
  3. 拆解19元的儿童电话手表,要是能二次开发就好了
  4. 如果我要...(开发版)
  5. Snmp学习总结系列——开篇
  6. 获取上传图片的大小 php,thinkphp5 获取上传图片的大小和信息
  7. html浏览器的区别是什么意思,不同浏览器对css的识别有区别吗?
  8. 如何在Linux上制作一个屏幕录像视频教程
  9. electron 的窗口设置最大化 最小化
  10. SSM开发环境的搭建(方式二)
  11. Java多线程常用面试题(含答案,精心总结整理)
  12. C#——绘制箭头的方法
  13. EPIC的服务器稳定吗,epic国内有服务器吗(epic服务器在哪)
  14. 关于GPIO的内部结构及编程步骤
  15. graphql java如何使用_graphql-java使用手册:part10 如何落地应用(Application concerns)...
  16. 网络对抗技术 实验三
  17. python爬虫热点项目—滑块验证码项目(以Bilili为例)
  18. Ubantu搭建深度学习和强化学习环境
  19. DllNotFoundException
  20. C++、高响应比优先算法

热门文章

  1. iconv java_libiconv之iconv函数的使用方法
  2. Python构造函数的使用
  3. decode函数用法
  4. tar 打包过滤某个文件及文件夹
  5. 编程将是下一个蓝领工作
  6. 【板栗糖GIS】twinmotion—外延背景图如何修改
  7. 《图解tcp/ip 阅读笔记》
  8. java sql传参_JAVA执行带参数的SQL语句
  9. java双色球实现买彩票与开奖
  10. 【JQuery】知识点总结