实现Callable接口
- 实现Callable 接口,需要返回类型
- 重写call方法,需要抛出异常
- 创建目标对象
- 创建执行服务:ExecutorService ser=Execututors.newFixedThreadPool(1);
- 提交执行:Future result1=ser.submit(t1)
- 获取结果:boolean r1=result1.get()
- 关闭服务:ser.shutdownNow();
package com.Jinone.www;
import java.io.IOException;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class MyCallable implements Callable<Boolean> {
private String url; //网络图片地址
private String name; //保存的文件名
public MyCallable(String url, String name) {
super();
this.url = url;
this.name = name;
}
//下载图片线程的执行体
public Boolean cal1() {
WebDownloader webDownloader=new WebDownloader();
webDownloader.downloader(name, url);
System.out.println("下载的了文件名为:"+name);
return true;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
MyCallable t1=new MyCallable("https://exp-picture.cdn.bcebos.com/e076d77622bc7dc54fc4c6eb5e460596b9142938.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1","1.jpg");
MyCallable t2=new MyCallable("https://exp-picture.cdn.bcebos.com/a99a494afa32939cb85432065719ce2c5a1b1538.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1","2.jpg");
//创建执行服务:
ExecutorService ser=Executors.newFixedThreadPool(2);
//提交执行
Future<Boolean> result1=ser.submit(t1);
Future<Boolean> result2=ser.submit(t2);
//获取执行
boolean r1=result1.get();
boolean r2=result2.get();
System.out.println(r1);
System.out.println(r2);
//关闭服务
ser.shutdownNow();
}
@Override
public Boolean call() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
//下载器
class WebDownloader{
//下载方法
public void downloader(String name,String url) {
try {
FileUtiles.copyURLToFile(new URL(url),new File(name));
}catch(IOException e){
e.printStackTrace();
System.out.println("IO异常,downloader方法出问题");
}
}
}
//结果:
//下载文件名为:2.jpg
//下载文件名为:3.jpg
//下载文件名为:2.jpg
callable的好处
- 可以定义返回值
- 可以抛出异常