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接口创建线程的完整实现过程。这种方式既简洁又灵活,适用于需要返回值和异常处理的场景。

上一篇:java多线程(7)——静态代理基础入门
下一篇:java多线程(5)——龟兔赛跑程序

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月05日 16时48分19秒