Java实现多线程的三种方式(3) ------实现Callable<V>接口
1、实现Callable接口
1 package com.cn.donleo.thread.impl; 2 3 import java.util.concurrent.Callable; 4 5 /** 6 * @author liangd 7 * date 2020-10-31 15:30 8 * code 9 */ 10 public class MyThreadByCallable implements Callable<Integer> { 11 12 private int i = 0; 13 14 @Override 15 public Integer call() throws Exception { 16 for (; i < 50; i++) { 17 System.out.println("第" + i + "个 MyThread: " + Thread.currentThread().getName()); 18 } 19 return i; 20 } 21 }
2、测试类
1 package com.cn.donleo.thread.impl; 2 3 import java.util.concurrent.ExecutionException; 4 import java.util.concurrent.FutureTask; 5 6 /** 7 * @author liangd 8 * date 2020-10-31 15:35 9 * code 测试Callable 10 */ 11 public class TestCallable { 12 /** 13 * 一、步骤 14 * 1、创建 Callable 接口的实现类,并实现 call 方法,该 call 方法会成为线程执行体,且 call 方法具有返回值, 15 * 在创建 callable 接口的实现类! 16 * 17 * 2、使用 FutrueTask 类来包装 Callable 对象,该 FutrueTask 封装类Callable的call方法的返回值 18 * 19 * 3、使用 FutrueTask 对象作为 Thread 的 target 创建并启动新线程! 20 * 21 * 4、使用 FutrueTask 的 get 方法获取执行结束后的返回值 22 * 23 * 二、实现runnable、callback接口与继承thread类的优缺点 24 * 25 * 采取 Runnable、Callable 的优势在于——线程类只是实现了Runnable 或 Callable 接口,还可以继承其它类; 26 * 在这种方法下,多个线程可以共享一个 target 对象,因此非常适合多个相同线程处理同一份资源的情况, 27 * 从而将 CPU、代码和数据分开,形参清晰的模型,体现了面对对象的编程思想。劣势在于编程复杂度略高。 28 * 29 * @param args 30 */ 31 public static void main(String[] args){ 32 MyThreadByCallable callable = new MyThreadByCallable(); 33 FutureTask<Integer> futureTask = new FutureTask<>(callable); 34 Thread thread1 = new Thread(futureTask,"线程1"); 35 thread1.start(); 36 37 try { 38 System.out.println(futureTask.get()); 39 } catch (InterruptedException | ExecutionException e) { 40 e.printStackTrace(); 41 } 42 } 43 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix