Java???????????ζ:Thread??Executor??ForkJoin??Actor
???????????? ???????[ 2015/1/14 11:03:25 ] ??????????????? java
?????????????????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?????????????????????????????????????????顣
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11