https://space.bilibili.com/95256449/channel/detail?cid=146244
Java中的多线程002
1、使用Callable接口实现多线程
package com
.stark
.study001
;
import org
.apache
.commons
.io
.FileUtils
;
import java
.io
.File
;
import java
.io
.IOException
;
import java
.net
.URL
;
import java
.util
.concurrent
.*
;
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() {
WebDownloader webDownloader
= new WebDownloader();
webDownloader
.downloader(url
, name
);
System
.out
.println(name
+ "文件已下载");
return true;
}
public static void main(String
[] args
) throws ExecutionException
, InterruptedException
{
TestCallable t1
= new TestCallable("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png", "picture001.jpg");
TestCallable t2
= new TestCallable("https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/baiduyun@2x-e0be79e69e.png", "picture002.jpg");
TestCallable t3
= new TestCallable("https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/tupian@2x-482fc011fc.png", "picture003.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();
}
}
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异常,WebDownloader.downloader()方法异常。");
}
}
}