Java基础学习:多线程08
-
实现Callable接口:
-
实现Callable接口,需要返回值类型
-
-
创建目标对象
-
创建执行服务:ExecutorService ser=Executors.newFixedThreadPool(1);
-
提交执行:Future<Boolean> result1=ser.submit(t1);
-
获取结果:boolean r1=result1.get();
-
关闭服务:ser.shutdownNow();
-
-
代码案例:
/**
* 线程创建方式3:实现Callable
*
* Callable的好处:
* 1,可以定义返回值;
* 2,可以抛出异常;
*/
public class TestCallable implements Callable {
private String name;
private String url;
public TestCallable(String url,String name){
this.name=name;
this.url=url;
}
public Boolean call(){
DownLoader downLoader=new DownLoader();
downLoader.downLoad(url,name);
System.out.println("下载了文件名:"+name);
return true;
}
//主线程
public static void main(String[] args) throws Exception{
TestCallable t1=new TestCallable("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "a1.png");
TestCallable t2=new TestCallable("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "a2.png");
TestCallable t3=new TestCallable("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "a3.png");
//创建执行服务:
ExecutorService ser= Executors.newFixedThreadPool(3);
//提交执行:
Future<Boolean> r1=ser.submit(t1);
Future<Boolean> r2=ser.submit(t2);
Future<Boolean> r3=ser.submit(t3);
//获取结果:
boolean flag1=r1.get();
boolean flag2=r2.get();
boolean flag3=r3.get();
//关闭服务:
ser.shutdownNow();
}
}
//下载器
class DownLoader{
//下载方法
public void downLoad(String url,String name){
try {
FileUtils.copyURLToFile(new URL(url), new File(name));
} catch (IOException e) {
e.printStackTrace();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律