线程创建方式三:实现callable接口

代码示例:

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.concurrent.*; /**
* @Description 线程创建方式三:实现callable接口
* @Author hzx
* @Date 2022-03-26
*/
class TestCallable implements Callable<Boolean> { private String url; //网络图片地址
private String name; //保存的文件名 public TestCallable(String url, String name) {
this.url = url;
this.name = name;
} /**
* 下载图片线程的执行体
*/
@Override
public Boolean call() {
WebDownloader webDownloader = new WebDownloader();
webDownloader.downloader(url, name);
System.out.println("下载了文件:"+name);
return true;
} public static void main(String[] args) throws ExecutionException, InterruptedException {
TestCallable t1 = new TestCallable(
"https://img2022.cnblogs.com/blog/1617979/202203/1617979-20220315222236055-1081286442.png","1.jpg");
TestCallable t2 = new TestCallable(
"https://img2022.cnblogs.com/blog/1617979/202203/1617979-20220315222535845-769752621.png","2.jpg");
TestCallable t3 = new TestCallable(
"https://img2022.cnblogs.com/blog/1617979/202203/1617979-20220315222316724-2013137843.png","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();
//打印返回结果
System.out.println("rs1返回值:"+rs1);
System.out.println("rs2返回值:"+rs2);
System.out.println("rs3返回值:"+rs3); //关闭服务
ser.shutdown();
}
} //下载器
class WebDownloader {
/**
* 下载方法
*/
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异常,下载方法出现问题");
}
}
}

输出结果:

下载了文件:1.jpg
下载了文件:3.jpg
下载了文件:2.jpg
rs1返回值:true
rs2返回值:true
rs3返回值:true

callable的好处

  • 1.可以定义返回值;
  • 2.可以抛出异常。

【多线程】线程创建方式三:实现callable接口的更多相关文章

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

    Callable接口 ① Java 5.0 在 java.util.concurrent 提供了一个新的创建执行 线程的方式:Callable 接口② Callable 接口类似于 Runnable, ...

  2. Java之创建线程的方式三:实现Callable接口

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

  3. 创建线程的方式三:实现Callable接口-----JDK5.0 新增

    package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...

  4. 创建线程的方式三:实现Callable接口 --- JDK 5.0新增

    /** * 创建线程的方式三:实现Callable接口. --- JDK 5.0新增 * * * 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? * 1 ...

  5. Java线程的创建方式三:Callable(四)

    一.Java实现多线程的三种方式 方式一:继承Thread类: public class Test extends Thread { public static void main(String[] ...

  6. 7. Callable 创建线程的方式三

    package com.gf.demo06; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionEx ...

  7. Java多线程学习(二)---线程创建方式

    线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...

  8. 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解

    不多说,直接上干货! 什么是进程? 正在进行中的程序(直译). 什么是线程? 就是进程中一个负责程序执行的控制单元(执行路径). 见 牛客网Java刷题知识点之进程和线程的区别 什么是多线程? 一个进 ...

  9. Java中的多线程的创建方式

    首先理清几个基本概念: 程序:为完成特定任务,用某种语言编写的一组指令的集合.即一段静态的代码(还没运行起来) 进程:是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源 ...

随机推荐

  1. Mybatis-Plus 如何实现一对多关系 举例 用户与角色

    Mybatis-Plus 一对多Mybatis-Plus 不写一句sql语句实现一对多 首先来看效果 Mysql数据库 用户表 角色表 用户与角色的中间表 中间表如下 将三张表通过Mybatis Pl ...

  2. 删除html标签或标签属性以及样式

    JavaScript module for stripping HTML tags and/or HTML element attributes from strings. 安装 npm instal ...

  3. 富文本编辑器CKeditor的配置和图片上传,看完不后悔

    CKeditor是一款富文本编辑器,本文将用极为简单的方式介绍一下它的使用和困扰大家很久的图片上传问题,要有耐心. 第一步:如何使用 1.官网下载https://ckeditor.com/ckedit ...

  4. 前端每日实战:96# 视频演示如何用纯 CSS 和 D3 创作一艘遨游太空的宇宙飞船

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oMqNmv 可交互视频 此视频是可 ...

  5. 在Android中区分点击和滑动操作

    转自:http://blog.csdn.net/do168/article/details/51587933 最近在写一个图片浏览安卓应用,想要弄成全屏显示,只在单击时显示工具栏和状态栏,在触摸滑动时 ...

  6. 【每日日报】第五十三天---安装My SQL

    1 2今天安装了My SQL并学习了一些基础的命令 mysql下载及安装教程 2 没有成功安装SQL Server,误删了一些文件 3 明天继续看视频 ------------------------ ...

  7. Android回到页面并刷新数据

    通过对Android Activity的生命周期的了解,需要在后退页面重写onResume()的方法. 建立自己更新数据的函数,并在onCreate()方法中调用. @Override protect ...

  8. JavaScript实现按钮改变网页背景色

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...

  9. redis的基础命令操作

    文章目录 前言 一.字符串类型 二.哈希类型 三.列表类型 四.集合类型 五.有序集合类型 六.通过命令 前言 redis的数据结构 redis存储的是key,value格式的数据,其中的key是字符 ...

  10. 一个程序的执行时间可以使用time+命令形式来获得

    编写程序testtime.c #include <stdio.h> //这个头一定要加 #include<time.h> main() { time_t timep; time ...