写一个多线程带返回值list<String>
时间: 2024-09-27 12:04:51 浏览: 32
浅谈Java获得多线程的返回结果方式(3种)
在Java中,创建一个返回List<String>的多线程任务,你需要首先定义一个实现了Runnable接口的类,然后在run()方法中执行你的任务,最后通过Future或者Callable来获取线程执行的结果。这里是一个简单的例子:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadedListTask {
private static final ExecutorService executor = Executors.newSingleThreadExecutor();
public static List<String> executeTask() throws ExecutionException, InterruptedException {
Future<List<String>> future = executor.submit(new Task());
// 等待任务完成
return future.get();
}
private static class Task implements Callable<List<String>> {
@Override
public List<String> call() {
List<String> result = new ArrayList<>();
// 这里模拟一个耗时的任务,实际上你可以替换为你需要执行的业务逻辑
for (int i = 0; i < 5; i++) {
result.add("Task Result " + i);
// 假设这个任务是异步执行的,比如网络请求或文件读取等
// 例如:
// Thread.sleep(1000); // 模拟等待
}
return result;
}
}
public static void main(String[] args) {
try {
List<String> resultList = executeTask();
System.out.println(resultList);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
```
在这个示例中,`Task`类实现了`Callable`接口,它返回一个Future对象,我们可以从future上调用get()方法阻塞直到任务完成并获取结果。注意,为了防止过度消耗系统资源,我们通常会使用线程池(如上面的单线程ExecutorService)来管理线程。
阅读全文