技术文摘
Java多线程入门:获取线程返回数据的两种方式
2025-01-02 04:43:23 小编
Java多线程入门:获取线程返回数据的两种方式
在Java多线程编程中,有时我们需要获取线程执行后的返回数据。本文将介绍两种常见的获取线程返回数据的方式。
方式一:使用Callable和Future接口
Callable接口与Runnable接口类似,但Callable可以返回结果并且可以抛出异常。当我们需要获取线程的返回值时,可以创建一个实现Callable接口的类,并在call方法中编写线程的具体逻辑。
示例代码如下:
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
public class CallableDemo {
public static void main(String[] args) throws Exception {
MyCallable myCallable = new MyCallable();
FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
Thread thread = new Thread(futureTask);
thread.start();
Integer result = futureTask.get();
System.out.println("线程返回结果:" + result);
}
}
方式二:通过共享变量
可以定义一个共享变量,在线程执行过程中修改这个共享变量的值,主线程可以读取该共享变量来获取线程的返回结果。不过需要注意线程安全问题,通常可以使用volatile关键字或者锁来保证数据的一致性。
示例代码如下:
class ShareData {
volatile int result;
}
class MyThread extends Thread {
private ShareData shareData;
public MyThread(ShareData shareData) {
this.shareData = shareData;
}
@Override
public void run() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
shareData.result = sum;
}
}
public class ShareVariableDemo {
public static void main(String[] args) throws InterruptedException {
ShareData shareData = new ShareData();
MyThread myThread = new MyThread(shareData);
myThread.start();
myThread.join();
System.out.println("线程返回结果:" + shareData.result);
}
}
以上就是Java多线程中获取线程返回数据的两种常见方式,开发者可以根据实际需求选择合适的方法。
- 数据质量的动态探查与前端相关实现
- 前端开发流程的自动化及提效实践
- 并发编程:CompletableFuture 异步编程并非难事
- 本地运用 Docker Compose 和 Nestjs 迅速构建基于 Dapr 的 Redis 发布/订阅分布式应用
- 对线程安全性的独特理解:如此清新脱俗的讲述
- 写出灵活系统竟这般容易!小白也能搞定高级 Java 业务!
- 五类出色的微服务 Java 框架
- 浏览器开发者工具的实用技巧汇总
- Rust备受赞誉,学习之人却为何寥寥?
- 软件设计中缓存的那些事
- 分布式事务 Seata 原理深度解析
- Volatile 助力解决 Java 并发可见性难题
- Linux 上动态链接模块库的实现方法
- 低代码十问,你能否回答
- 共同剖析 Go 语言逃逸