多线程-实现Callable接口-修改下载图片的案例

1.实现callable接口,需要返回值类型
2.重写call方法,需要抛出异常
3.创建目标对象
4.创建执行服务:ExecutorService ser=Exectutors.newFixedThreadPool();
5.提交执行:Future<Boolean> result1=ser.submit(t1);
6.获取结果:boolean r1=result1.get();
7.关闭服务:ser.shutdownNow();

  

复制代码
package Threads;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import java.net.URL;
import java.util.concurrent.*;

//线程创建方式三,实现Callable
/*
Callable好处:
1.可以定义返回值
2.可以抛出异常

*/
public class Main implements Callable<Boolean> {//要有返回值类型
    //创建变量
    private String url;
    private String name;
    
    public Main(){}
    public Main(String url,String name){
        this.url=url;
        this.name=name;
        
    }
    //线程体:下载图片线程的执行体
    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 {
        Main t1=new Main("https://img01.sogoucdn.com/app/a/100520021/3b453574cfbfd216bc9e22b7aedb75a3","1.jpg");
        Main t2=new Main("https://img01.sogoucdn.com/app/a/100520021/3b453574cfbfd216bc9e22b7aedb75a3","2.jpg");
        Main t3=new Main("https://img01.sogoucdn.com/app/a/100520021/3b453574cfbfd216bc9e22b7aedb75a3","3.jpg");

        //创建执行服务:Exectutors
        ExecutorService ser= Executors.newFixedThreadPool(3);//创建3个池子
        //把线程,提交执行:
        Future<Boolean> result1=ser.submit(t1);
        Future<Boolean> result2=ser.submit(t2);
        Future<Boolean> result3=ser.submit(t3);
        //获取结果:会有异常抛出就行
        boolean r1=result1.get();
        boolean r2=result2.get();
        boolean r3=result3.get();
        //打印返回值
        System.out.println(r1);
        System.out.println(r2);
        System.out.println(r3);
        //关闭服务:
        ser.shutdownNow();
       
    }
    
    
    
}
//下载器
class WebDownloader{
    //下载方法
    public void downloader(String url,String name){
       try{
        //copyURLToFile:把网上的文件地址,变成一个文件,new URL(url):添加一个网络路径,new File(name):添加一个文件路径
        FileUtils.copyURLToFile(new URL(url),new File(name));
       }catch(IOException e){
           e.printStackTrace();
           System.out.println("IO异常,downloader出现问题");
       }
           
       }
}
复制代码

 

posted @   hollg  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示