gpt4 book ai didi

Java:从多个线程检索时间的最佳方式

转载 作者:行者123 更新时间:2023-11-29 06:20:27 24 4
gpt4 key购买 nike

我们有 1000 个线程访问 Web 服务,并计算调用所花费的时间。我们希望每个线程都将自己的计时结果返回给主应用程序,以便记录各种统计信息。请注意,为此考虑了各种工具,但出于各种原因,我们需要编写自己的工具。每个线程返回时间的最佳方式是什么 - 到目前为止我们已经考虑了两种选择: -1. 一旦一个线程有了它的计时结果,它就会调用一个提供同步方法的单例来写入文件。这确保所有每个线程都将依次写入文件(尽管顺序未定 - 这很好),并且由于调用是在线程获取计时结果之后完成的,因此不会被阻塞等待写入真的是个问题。当所有线程都完成后,主应用程序可以读取文件以生成统计信息。2.使用Executor、Callable和Future接口(interface)哪种方法最好,或者还有其他更好的方法吗?首先十分感谢保罗

最佳答案

使用后一种方法。

您的工作人员实现 Callable。然后,您将它们提交到一个线程池,并为每个对象获取一个 Future 实例。

然后只需调用 Futures 上的 get() 即可获得计算结果。

import java.util.*;
import java.util.concurrent.*;

public class WebServiceTester {

public static class Tester
implements Callable {
public Integer call() {
Integer start = now();
//Do your test here
Integer end = now();
return end - start;
}
}

public static void main(String args[]) throws Exception {
ExecutorService pool = Executors.newFixedThreadPool(1000);
Set<Future<Integer>> set = new HashSet<Future<Integer>>();
for (int i =0 ; i < 1000 i++) {
set.add(pool.submit(new Tester()));
}
Set<Integer> results = new Set<Integer>();
for (Future<Integer> future : set) {
results.put(future.get());
}

//Manipulate results however you wish....
}
}

关于Java:从多个线程检索时间的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com