我编写了一个 ExecutorService,用于并行执行多个线程并获得找到的第一个结果,我使用“invokeAny”方法来完成它。
类似于以下内容:
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
Set<Callable<String>> callables = new HashSet<Callable<String>>();
callables.add(new Callable<String>() {
public String call() throws Exception {
System.out.println("Task 1 started...");
return "Task 1 Finished";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
System.out.println("Task2 started...");
return "Task 2 Finished";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 3 Finished";
}
});
try {
String result = executorService.invokeAny(callables);
System.out.println("result = " + result);
} catch (Throwable e) {
e.printStackTrace();
}
executorService.shutdown();
}
}
一切正常,但是因为我的代码执行了很多线程,所以使用了大量的资源(CPU)。所以我在网上看了一下,我发现人们建议使用 Quasar 来解决这些问题......根据规范,它应该作为 java“并发”框架工作,所以我看了看,我找到了这个类“ FiberExecutorScheduler ”,这似乎很有希望,但我找不到一种方法来组织我的工作以实现与我以前的代码相同的行为。
有没有办法用 Quasar 来实现它?你能举个例子吗?任何帮助将不胜感激。