一、步骤
1、定义一个线程任务类实现Callable接口,声明线程执行的结果类型。
2、重写线程任务类的call()方法,这个方法可以直接返回执行的结果。
3、创建一个Callable的线程任务对象。
4、把Callable的线程任务对象包装成一个未来任务对象。
5、把未来任务对象包装成线程对象。
6、调用线程start()方法,启动线程。
7、获取线程执行结果。
二、代码
packagecom.zjl.study.多线程;importjava.util.concurrent.Callable;importjava.util.concurrent.FutureTask;/** * Created by zjl 2022/5/28 **/publicclass 创建线程方式3{publicstaticvoidmain(String[] args){// 3、创建一个Callable的线程任务对象。MyCallable myCallable=newMyCallable();// 4、把Callable的线程任务对象包装成一个未来任务对象。FutureTask<String> futureTask=newFutureTask<>(myCallable);// 5、把未来任务对象包装成线程对象。Thread thread=newThread(futureTask);// 6、调用线程start()方法,启动线程。 thread.start();// 7、获取线程执行结果。如果此时获取结果的任务还未执行完成,会让出CPU,直至任务执行完成才获取结果。try{String s= futureTask.get();System.out.println(s);}catch(Exception e){ e.printStackTrace();}}}// 1、定义一个线程任务类实现Callable接口,声明线程执行的结果类型。classMyCallableimplementsCallable<String>{// 2、重写线程任务类的call()方法,这个方法可以直接返回执行的结果。@OverridepublicStringcall()throwsException{return"子线程任务执行,线程名称为:"+Thread.currentThread().getName();}}
三、运行结果
四、优缺点
- 代码复杂
- 线程任务只是实现了Callable接口,可以继续继承其他类,而且可以继续实现其他接口。
- 同一个线程任务对象可以被包装成多个线程对象。
- 适合多个线程去共享同一个资源。
- 实现解耦操作,线程任务代码可以被多个线程共享,线程任务代码和线程独立。
- 线程池可以放入Runnable接口和Callable接口。
- 可以得到线程执行结果。
热门文章
- 哈尔滨农大动物医院地址电话是多少(哈尔滨农大兽医院)
- 动物疫苗在哪里买的到呢(动物注射疫苗注射哪里)
- 「11月6日」最高速度19.2M/S,2024年Shadowrocket/Clash/V2ray/SSR每天更新免费机场订阅链接
- 「1月16日」最高速度22M/S,2025年V2ray/Clash/Shadowrocket/SSR每天更新免费机场订阅链接
- 「1月23日」最高速度22.7M/S,2025年V2ray/Clash/Shadowrocket/SSR每天更新免费机场订阅链接
- 「11月23日」最高速度19.1M/S,2024年Shadowrocket/SSR/V2ray/Clash每天更新免费机场订阅链接
- 厦门宠物领养中心地址 厦门宠物领养中心地址在哪里
- dell设置ssd启动(dell设置从ssd启动)
- 「1月7日」最高速度21.8M/S,2025年Clash/SSR/V2ray/Shadowrocket每天更新免费机场订阅链接
- MySQL VARCHAR列的最大长度是多少?