
java线程(6)——创建的三种方式3.实现Callable接口
发布日期:2021-05-07 02:53:01
浏览次数:27
分类:精选文章
本文共 2093 字,大约阅读时间需要 6 分钟。
创建类实现Callable接口,实现call方法
创建下载器从网上下载图片
创建main方法调用线程
运行结果
好的,今天我来分享一个关于Java线程创建的方法。在线程创建方面,有三种常用的方式,这次重点介绍通过实现Callable接口的方式来实现线程。
首先,Callable接口的优势在于它支持定义返回值类型,并且可以抛出异常。这种机制比传统的Runnable更灵活,因为我们可以根据需要定义具体的执行逻辑。
接下来,我们来看具体实现。创建一个实现Callable的类,首先需要定义接口的方法call(). 在这个方法中,我们可以执行具体的任务。例如,下面是一个下载图片的例子:
public class TestCallable implements Callable { 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; }}
然后,我们需要创建一个下载器类来实现实际的下载功能。这个类需要能处理网络下载,并且处理IO异常。以下是一个简单的实现:
public 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异常,downloader方法出现问题"); } }}
最后,通过main方法来调用线程。通过Callable接口创建的线程调用通常分为四步:创建执行服务、提交执行、获取结果、关闭服务。以下是一个完整的main方法实现:
public static void main(String[] args) throws ExecutionException, InterruptedException { TestCallable t1 = new TestCallable("https://profile.csdnimg.cn/8/5/C/1_qq_45895576","1.jpg"); TestCallable t2 = new TestCallable("https://profile.csdnimg.cn/4/4/A/3_g1509635584","2.jpg"); TestCallable t3 = new TestCallable("https://profile.csdnimg.cn/F/6/D/3_i_r_o_n_m_a_n","3.jpg"); ExecutorService ser = Executors.newFixedThreadPool(1); Future result1 = ser.submit(t1); Future result2 = ser.submit(t2); Future result3 = ser.submit(t3); boolean rs1 = result1.get(); boolean rs2 = result2.get(); boolean rs3 = result3.get(); System.out.println(rs1); System.out.println(rs2); System.out.println(rs3); ser.shutdownNow();}
通过以上代码,我们可以看到,通过Callable接口实现线程创建的优势。每个线程都可以独立执行任务,并通过Future对象获取执行结果。这种方式在处理多个任务时特别有用,因为它可以更方便地管理线程池和结果。
运行结果(此处应去除图片描述)
以上就是通过实现Callable接口创建线程的完整实现过程。这种方式既简洁又灵活,适用于需要返回值和异常处理的场景。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月05日 16时48分19秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
解决Nginx 404 not found问题
2019-03-09
计算机网络之第三章笔记--数据链路层
2019-03-09
创建型模式之简单工厂模式实例及代码操作
2019-03-09
广东外语外贸大学第三届网络安全大赛Writeup
2019-03-09
跟着燕青学分布式事务控制技术方案
2019-03-09
Activiti视频分享
2019-03-09
VS2019 报错: LINK Error 无法找到 MSCOREE.lib的解决办法
2019-03-09
关于JS中的内存溢出与内存泄漏
2019-03-09
JS实现防抖与节流(使用按钮触发事件)
2019-03-09
React 学习笔记 —— refs 属性的三种书写方式
2019-03-09
CCF 模拟2-1 夏令营
2019-03-09
第八届蓝桥杯——杨辉三角
2019-03-09
算法训练——字符串合并
2019-03-09
信息学奥赛一本通【题目索引 + 解答】
2019-03-09
什么时候需要重写HashCode()
2019-03-09
2021-04-23
2019-03-09
Linux编程基础之创建两个子进程而不创建孙子进程
2019-03-09
hadoop 分布式文件系统的计算和高可用
2019-03-09
【Linux】VMware Workstation 不可恢复错误: (vcpu-0)
2019-03-09
VS中 fatal error LNK1123: 转换到 COFF 期间失败 的解决方法
2019-03-09