• 第五篇、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;
        }
    
        @Override
        public 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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    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方法出现异常。");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    运行结果:
    在这里插入图片描述


    总结

  • 相关阅读:
    赛宁党支部赴延安开展革命旧址学习主题党日活动
    js笔试面试题5道附答案
    如何免费给PDF文件添加标注?
    MBA-day25 最值问题-应用题
    介绍rabbitMQ
    【LeetCode-202】快乐数
    一文搞定 UDP 和 TCP 高频面试题!
    万字长文Python面试题,建议先收藏
    用嘉立创查找元件的原理图
    ts枚举的两种类型是什么?
  • 原文地址:https://blog.csdn.net/weixin_45796249/article/details/126927538