Java中有一千条数据怎么使用多线程发送请求并储存返回值
时间: 2024-03-16 22:42:34 浏览: 105
可以使用Java中的`ExecutorService`和`Callable`来实现多线程发送请求并储存返回值。首先,我们需要定义一个发送请求的函数,接收一条数据并发送请求,并返回请求的结果。然后,创建多个`Callable`对象,每个对象都调用发送请求的函数,并传入不同的数据。最后,将这些`Callable`对象提交给`ExecutorService`来执行,并将`Future`对象储存在一个列表中。最后,等待所有`Future`对象完成并获取返回值,存储在一个列表中。以下是一个简单的示例代码:
```java
import java.io.IOException;
import java.util.List;
import java.util.concurrent.*;
// 异步请求的回调接口
interface Callback {
void onSuccess(String result);
void onFailure(IOException e);
}
public class MultiThreadRequest {
// 发送请求的函数
private String sendRequest(String data) throws IOException {
// 发送请求的代码
return "result of " + data;
}
public List<String> requestMessages(List<String> dataList) throws InterruptedException, ExecutionException {
// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(10);
// 创建Callable对象列表
List<Callable<String>> callableList = new LinkedList<>();
for (String data : dataList) {
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
return sendRequest(data);
}
};
callableList.add(callable);
}
// 提交Callable对象列表并获取Future对象列表
List<Future<String>> futures = executor.invokeAll(callableList);
// 获取所有Future对象的返回值
List<String> resultList = new LinkedList<>();
for (Future<String> future : futures) {
resultList.add(future.get());
}
// 关闭线程池
executor.shutdown();
// 返回结果列表
return resultList;
}
// 异步发送请求的函数
public void asyncRequest(String data, Callback callback) {
new Thread(new Runnable() {
@Override
public void run() {
try {
String result = sendRequest(data);
callback.onSuccess(result);
} catch (IOException e) {
callback.onFailure(e);
}
}
}).start();
}
}
```
在上面的代码中,我们首先定义了一个发送请求的函数`sendRequest`,接收一条数据并发送请求,并返回请求的结果。然后,创建多个`Callable`对象,每个对象都调用发送请求的函数,并传入不同的数据。最后,将这些`Callable`对象提交给`ExecutorService`来执行,并将`Future`对象储存在一个列表中。最后,等待所有`Future`对象完成并获取返回值,存储在一个列表中。此外,我们还定义了一个异步发送请求的函数`asyncRequest`,接收一条数据和一个回调函数,并在新线程中异步发送请求并处理结果。
阅读全文