实现Callable接口
/**
* 了解线程创建的第三种方式:实现 Callable接口
*/
public class CDownloader implements Callable<Boolean> {
private String url;// 远程路径
private String name;// 存储名字
public CDownloader(String url, String name) {
super();
this.url = url;
this.name = name;
}
public Boolean call() throws Exception {
WebDownloader wd = new WebDownloader();
wd.download(url, name);
System.out.println(name);
return true;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
CDownloader cd1 = new CDownloader("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543476631622&di=794eae77faeeb0648e38eadec11db9de&imgtype=0&src=http%3A%2F%2Fpic.qiantucdn.com%2F58pic%2F18%2F48%2F37%2F5627d709ebefd_1024.jpg", "phone.jpg");
CDownloader cd2 = new CDownloader("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1823835233,296379255&fm=26&gp=0.jpg", "cat.jpg");
CDownloader cd3 = new CDownloader("https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1614468511,889001109&fm=26&gp=0.jpg", "dog.jpg");
//创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(3);
//提交执行
Future<Boolean> result1 = ser.submit(cd1);
Future<Boolean> result2 = ser.submit(cd2);
Future<Boolean> result3 = ser.submit(cd3);
//获取结果
boolean r1 = result1.get();
boolean r2 = result2.get();
boolean r3 = result3.get();
//关闭服务
ser.shutdownNow();
}
}
龟兔赛跑
/**
* 模拟龟兔赛跑
*/
public class CRacer implements Callable<Integer> {
private static String winner;//胜利者
//public void run() {
public Integer call() throws Exception {
for(int steps=1;steps<=100;steps++){
//模拟休息
if(Thread.currentThread().getName().equals("rabbit")&&steps%10==0){
Thread.sleep(100);
}
System.out.println(Thread.currentThread().getName()+"-->"+steps);
//比赛是否结束
boolean flag = gameOver(steps);
if(flag){
break;
}
}
return null;
}
private boolean gameOver(int steps){
if(winner!=null){//存在胜利者
return true;
}else{
if(steps == 100){
winner = Thread.currentThread().getName();
System.out.println("winner==>"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CRacer racer = new CRacer();
//创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(2);
//提交执行
Future<Integer> result1 = ser.submit(racer);
Future<Integer> result2 = ser.submit(racer);
//获取结果
Integer r1 = result1.get();
Integer r2 = result2.get();
System.out.println(r1+"-->"+r2);
//关闭服务
ser.shutdownNow();
}
}