?????????????????Java????в??д?????????????????????Java????????????ü???????????Executor????ForkJoin ???????????е?Actor????
????Java????????4????Threads??Executors??ForkJoin??Actors
????????????????????鰱?з????????硣???????????д???????????????????????????????С????????Python??????????????????潲????Python?????????????????????????????????????????Jython??JVM?????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????Щ??????????????????????????????????????????Щ?????????????????????????????м?????????????????????????????
??????????????У??????????????????ò??????????????????????????????????Щ????????Щ???????????Щ????????????????????????????
????????????????漸?????????????????????
?????????
????Executors??Services
????ForkJoin?????????
????Actor???
??????????????Щ??????н???????Щ???????????Щ???????????????????????????????????е???????????????????Щ????????????????????????????д?????????????????????????????????
???????????????£??????o??????С???飬???????????????????????????????????????????????????????μ??飡
????????
?????????????????????????????????????????????????????Щ??????????????????????????????????????????????????????http??????????????????????????????????????á?
????????д?????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????Java???????????????е????????Щ??????????????????????JCStress?????????
???????????????????????????????JVM???????????????????????
????????1?????“???ζ”???????
????????????????????????????????????????????????Java??????????????????????????????????????????????????????
??????????JVM??????????????????????????????????????????????????????
????????????????????????????JVM????????????????
?????????????????????????????Runnable??????.start()??????????????API???????????????????????????????boolean?????????????
????????????????У???????????????????????棬???????????????????????????AtomicReference????????????????????????????????????д????????????

 

private static String getFirstResult(String question?? List<String> engines) {
AtomicReference<String> result = new AtomicReference<>();
for(String base: engines) {
String url = base + question;
new Thread(() -> {
result.compareAndSet(null?? WS.url(url).get());
}).start();
}
while(result.get() == null); // wait for some result to appear
return result.get();
}

?????????????????????????????????????????/????????????????????????????????У???????????????????????
????????????????????????????????????????????????????????????????????????????????????????????ì????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????
????????2????????Executor??CompletionService
?????????????????API?????????????????????JVM?????????????????????Executor????Executor?????????????
????public interface Executor {
????void execute(Runnable command);
????}
??????????????δ???Runnable???????????????“??????????????????????????????????”
????????????Executors????????鷽????????????????????????????executor??????????newFixedThreadPool()?????????????????????????????????????????????????????????ζ?????????е???????????????????????????????????е?????????????executor????????
???????????????ExecutorService????executor??????????????CompletionService????????????????????????????С??????????????????????????????????
????????service.take()????ε??y????????????????

 

private static String getFirstResultExecutors(String question?? List<String> engines) {
ExecutorCompletionService<String> service = new ExecutorCompletionService<String>(Executors.newFixedThreadPool(4));
for(String base: engines) {
String url = base + question;
service.submit(() -> {
return WS.url(url).get();
});
}
try {
return service.take().get();
}
catch(InterruptedException | ExecutionException e) {
return null;
}
}

???????????????????????????????????????????????????????executor??executor?????????????????磬????????????????????????????????????????????????????????????????????????????????????????????????????????е????????????????????????????????д?С??
??????лJDK??????к??????????????Щ??????????????????????????????Executors.newFixedThreadPool(4)??
????????????????????????????????????????????????????????????????????????????????????????????????????Щ?????????????????棬??????????????????
???????????????????????????????executor?????
????????3????????????????ForkJoinPool (FJP)
????Java 8?м?????????????????????????????д??????????????????lambda??????????????????????????
?????????????????????????????м????????????????????????Щ????????????????????????????Σ??????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????ForkJoinPool.commonPool()?????е???????ó???JVM????????????JVM????????????????????????????????????????
????private static String getFirstResult(String question?? List<String> engines) {
????// get element as soon as it is available
????Optional<String> result = engines.stream().parallel().map((base) -> {
????String url = base + question;
????return WS.url(url).get();
????}).findAny();
????return result.get();
????}
?????????????????????????????????????????????????ɡ???????????ζ????????ó????п???????Щ?????????????????????????????????????????????У?????????????????????????????????????????????????????????????????????
????ForkJoin??????????????????????????????д????????á??????????д??????????д????С????????????????????
???????????????????????????????????????????????JVM?????????????????????????????????????????顣