åç §: 説æ
| ã€ã³ã¿ãã§ãŒã¹ | 説æ |
|---|---|
| BlockingDeque<E> |
èŠçŽ ã®ååŸæã«äž¡ç«¯ãã¥ãŒã空ã§ãªããªããŸã§åŸ
æ©ããããèŠçŽ ã®æ ŒçŽæã«äž¡ç«¯ãã¥ãŒå
ã«ç©ºããçãããŸã§åŸ
æ©ãããããã¯æäœã远å ã§ãµããŒãããããã
Dequeã§ãã |
| BlockingQueue<E> |
èŠçŽ ã®ååŸæã«ãã¥ãŒã空ã§ãªããªããŸã§åŸ
æ©ããããèŠçŽ ã®æ ŒçŽæã«ãã¥ãŒå
ã«ç©ºããçãããŸã§åŸ
æ©ããæäœã远å ã§ãµããŒãããããã
Queueã§ãã |
| Callable<V> |
çµæãè¿ããäŸå€ãã¹ããŒããããšãããã¿ã¹ã¯ã§ãã
|
| CompletableFuture.AsynchronousCompletionTask |
asyncã¡ãœããã«ãã£ãŠçæãããéåæã¿ã¹ã¯ãèå¥ããããŒã«ãŒã»ã€ã³ã¿ãã§ãŒã¹ã§ãã |
| CompletionService<V> |
æ°ããéåæã¿ã¹ã¯ã®çæããå®äºæžã¿ã¿ã¹ã¯ã®çµæã®æ¶è²»ããåé¢ãããµãŒãã¹ã§ãã
|
| CompletionStage<T> |
CompletionStageãå®äºãããšãã«ã¢ã¯ã·ã§ã³ã®å®è¡ãŸãã¯å€ã®èšç®ãè¡ããéåæã®å¯èœæ§ãããèšç®ã®ã¹ããŒãžã§ãã
|
| ConcurrentMap<K,V> |
ã¹ã¬ããã®å®å
šæ§ãšååæ§ã®ä¿èšŒãæäŸãã
Mapã§ãã |
| ConcurrentNavigableMap<K,V> |
NavigableMapãªãã¬ãŒã·ã§ã³ããµããŒãããConcurrentMapã§ãããã®ããã²ãŒãå¯èœãªãµããããã«å¯ŸããŠã¯ååž°çã§ãã |
| Delayed |
äžå®ã®é
å»¶ã®ããšã«åœ±é¿ãåãããªããžã§ã¯ãã«ããŒã¯ä»ãããããã®ãæ··åã¹ã¿ã€ã«ã®ã€ã³ã¿ãã§ãŒã¹ã§ãã
|
| Executor |
éä¿¡ããã
Runnableã¿ã¹ã¯ãå®è¡ãããªããžã§ã¯ãã§ãã |
| ExecutorService | |
| ForkJoinPool.ForkJoinWorkerThreadFactory |
æ°ãã
ForkJoinWorkerThreadãäœæããããã®ãã¡ã¯ããªã§ãã |
| ForkJoinPool.ManagedBlocker |
ForkJoinPoolå
ã§å®è¡äžã®ã¿ã¹ã¯ã«ã€ããŠã®ç®¡ç察象ã®äžŠåæ§ãæ¡åŒµããããã®ã€ã³ã¿ãã§ãŒã¹ã§ãã |
| Future<V> |
Futureã¯ãéåæèšç®ã®çµæã衚ããŸãã |
| RejectedExecutionHandler |
ThreadPoolExecutorã§å®è¡ã§ããªãã¿ã¹ã¯ã®ãã³ãã©ã§ãã |
| RunnableFuture<V> | |
| RunnableScheduledFuture<V> |
Runnableã§ããScheduledFutureã§ãã |
| ScheduledExecutorService |
æå®ãããé
å»¶æéåŸãŸãã¯å®æçã«ã³ãã³ããå®è¡ããããã«ã¹ã±ãžã¥ãŒã«ã§ãã
ExecutorServiceã§ãã |
| ScheduledFuture<V> |
åæ¶ãå¯èœãªãé
å»¶ãããçµæçæã¢ã¯ã·ã§ã³ã§ãã
|
| ThreadFactory |
èŠæ±ã«å¿ããŠæ°ããã¹ã¬ãããäœæãããªããžã§ã¯ãã§ãã
|
| TransferQueue<E> |
ã³ã³ã·ã¥ãŒããèŠçŽ ãåãåããŸã§ãããã¥ãŒãµãåŸ
æ©ãã
BlockingQueueã |
| ã¯ã©ã¹ | 説æ |
|---|---|
| AbstractExecutorService |
ExecutorServiceå®è¡ã¡ãœããã®ããã©ã«ãå®è£
ãæäŸããŸãã |
| ArrayBlockingQueue<E> |
é
åã«é£åãããå¶éä»ãã®ããããã³ã°ã»ãã¥ãŒã§ãã
|
| CompletableFuture<T> |
æç€ºçã«(ãã®å€ãšã¹ããŒã¿ã¹ãèšå®ããŠ)å®äºã§ãã
Futureã§ãããã®å®äºæã«çºçããäŸå颿°ããã³ã¢ã¯ã·ã§ã³ããµããŒãããCompletionStageãšããŠäœ¿çšã§ããŸãã |
| ConcurrentHashMap<K,V> |
ååŸã®å®å
šãªåææ§ããã³äºæ³ãããé«ãæŽæ°å¹³è¡æ§ããµããŒãããããã·ã¥ã»ããŒãã«ã§ãã
|
| ConcurrentHashMap.KeySetView<K,V> |
ããŒã®
SetãšããŠã®ConcurrentHashMapã®ãã¥ãŒã§ãããªãã·ã§ã³ã§ãå
±éã®å€ã«ãããããããšã«ãã£ãŠè¿œå ãæå¹åã§ããŸãã |
| ConcurrentLinkedDeque<E> |
ãªã³ã¯ã»ããŒãã«åºã¥ããå¶éãªãã®äžŠè¡äž¡ç«¯ãã¥ãŒã§ãã
|
| ConcurrentLinkedQueue<E> |
ãªã³ã¯ã»ããŒãã«åºã¥ããå¶éãªãã®ã¹ã¬ããã»ã»ãŒããªãã¥ãŒã§ãã
|
| ConcurrentSkipListMap<K,V> |
ã¹ã±ãŒã©ãã«ãªäžŠè¡
ConcurrentNavigableMapå®è£
ã§ãã |
| ConcurrentSkipListSet<E> |
ConcurrentSkipListMapã«åºã¥ãã¹ã±ãŒã©ãã«ãªäžŠè¡NavigableSetå®è£
ã§ãã |
| CopyOnWriteArrayList<E> |
åºã«ãªãé
åã®æ°ããã³ããŒãäœæããããšã«ããããã¹ãŠã®æšç§»çæäœ(add
ãsetãªã©)ãå®è£
ãããArrayListã®ã¹ã¬ããã»ã»ãŒããªå€æ°ã§ãã |
| CopyOnWriteArraySet<E> |
å
éšã®
CopyOnWriteArrayListããã¹ãŠã®ãªãã¬ãŒã·ã§ã³ã§äœ¿çšããSetã§ãã |
| CountDownLatch |
ã»ãã®ã¹ã¬ããã§å®è¡äžã®æäœã»ãããå®äºãããŸã§ã1ã€ä»¥äžã®ã¹ã¬ãããåŸ
æ©å¯èœã«ããåæåæ¯æŽæ©èœã§ãã
|
| CountedCompleter<T> |
ããªã¬ãŒãããæç¹ã§ä¿çäžã®ã¢ã¯ã·ã§ã³ãæ®ã£ãŠããªãå Žåã«å®è¡ãããå®äºã¢ã¯ã·ã§ã³ãå«ã
ForkJoinTaskã§ãã |
| CyclicBarrier |
ã¹ã¬ããã»ã»ããã®ãããããå
±éã®ããªã¢ãŒã»ãã€ã³ãã«éãããŸã§åŸ
æ©ããããšãå¯èœã«ããåæåæ¯æŽæ©èœã§ãã
|
| DelayQueue<E extends Delayed> |
DelayedèŠçŽ ã®å¶éãªãã®
ããããã³ã°ã»ãã¥ãŒã§ãé
å»¶æéãçµéåŸã«ã®ã¿ãèŠçŽ ãååŸã§ããŸãã |
| Exchanger<V> |
ã¹ã¬ããããã¢ã«ããŠããã¢å
ã®èŠçŽ ã亀æã§ããåæãã€ã³ãã
|
| ExecutorCompletionService<V> |
ã¿ã¹ã¯ã®å®è¡ã«ãæå®ããã
Executorã䜿çšããCompletionServiceã§ãã |
| Executors |
ãã®ããã±ãŒãžã§å®çŸ©ããã
ExecutorãExecutorServiceãScheduledExecutorServiceãThreadFactoryãããã³Callableã¯ã©ã¹çšã®ãã¡ã¯ããªããã³ãŠãŒãã£ãªãã£ã»ã¡ãœããã§ãã |
| ForkJoinPool |
ForkJoinTaskãå®è¡ããããã®ExecutorServiceã |
| ForkJoinTask<V> |
ForkJoinPoolå
ã§å®è¡ããæœè±¡åºåºã¯ã©ã¹ã§ãã |
| ForkJoinWorkerThread |
ForkJoinPoolã«ãã£ãŠç®¡çãããã¹ã¬ããã§ãããForkJoinTaskãå®è¡ããŸãã |
| FutureTask<V> |
åæ¶ãå¯èœãªéåæèšç®ã§ãã
|
| LinkedBlockingDeque<E> |
ãªã³ã¯ã»ããŒãã«åºã¥ãããªãã·ã§ã³ã§å¶éä»ãã«ãªãããããã³ã°äž¡ç«¯ãã¥ãŒã§ãã
|
| LinkedBlockingQueue<E> |
ãªã³ã¯ã»ããŒãã«åºã¥ãããªãã·ã§ã³ã§å¶éä»ãã«ãªãããããã³ã°ã»ãã¥ãŒã§ãã
|
| LinkedTransferQueue<E> |
ãªã³ã¯ã»ããŒãã«åºã¥ããå¶éãªãã®
TransferQueueã§ãã |
| Phaser |
å䜿çšå¯èœãªåæåããªã¢ãŒã§ãæ©èœã¯
CyclicBarrierããã³CountDownLatchãšåæ§ã§ãããããæè»ãªäœ¿ç𿹿³ããµããŒãããŸãã |
| PriorityBlockingQueue<E> |
ã¯ã©ã¹
PriorityQueueãšåãé åºä»ãã«ãŒã«ã䜿çšãããšãšãã«ããããã³ã°ååŸãªãã¬ãŒã·ã§ã³ãæäŸãããå¶éãªãã®ããããã³ã°ã»ãã¥ãŒã§ãã |
| RecursiveAction |
çµæã®åºãªãååž°çãª
ForkJoinTaskã |
| RecursiveTask<V> |
çµæãçæããååž°çãª
ForkJoinTaskã |
| ScheduledThreadPoolExecutor |
æå®ãããé
å»¶æéåŸãŸãã¯å®æçã«ã³ãã³ããå®è¡ããããã«ã¹ã±ãžã¥ãŒã«ã§ãã
ThreadPoolExecutorã§ãã |
| Semaphore |
èšæ°ã»ããã©ã§ãã
|
| SynchronousQueue<E> |
åæ¿å
¥ãªãã¬ãŒã·ã§ã³ãå¥ã®ã¹ã¬ããã«ãã察å¿ããåé€ãªãã¬ãŒã·ã§ã³ãåŸ
æ©ããå¿
èŠããã(ããã³ãã®éã®) ããããã³ã°ã»ãã¥ãŒã§ãã
|
| ThreadLocalRandom |
çŸåšã®ã¹ã¬ããããç¬ç«ããéé¢ãããä¹±æ°ãžã§ãã¬ãŒã¿ã
|
| ThreadPoolExecutor |
ããŒã«ãããè€æ°ã®ã¹ã¬ããã®1ã€ã䜿çšããŠéä¿¡ãããåã¿ã¹ã¯ãå®è¡ãã
ExecutorServiceã§ããéåžžã¯Executorsãã¡ã¯ããªã»ã¡ãœããã䜿çšããŠæ§æãããŸãã |
| ThreadPoolExecutor.AbortPolicy |
RejectedExecutionExceptionãã¹ããŒããæåŠãããã¿ã¹ã¯ã®ãã³ãã©ã§ãã |
| ThreadPoolExecutor.CallerRunsPolicy |
executorãã·ã£ããããŠã³ããŠããªãå Žåã«ã
executeã¡ãœããã®åŒåºãã¹ã¬ããå
ã§ãæåŠãããã¿ã¹ã¯ãçŽæ¥å®è¡ãããæåŠãããã¿ã¹ã¯ã®ãã³ãã©ã§ããã·ã£ããããŠã³ããŠããå Žåãã¿ã¹ã¯ã¯ç Žæ£ãããŸãã |
| ThreadPoolExecutor.DiscardOldestPolicy |
executorãã·ã£ããããŠã³ããŠããªãå Žåã«ããã£ãšãå€ãæªåŠçã®èŠæ±ãç Žæ£ããŠ
executeãå詊è¡ãããæåŠãããã¿ã¹ã¯ã®ãã³ãã©ã§ããã·ã£ããããŠã³ããŠããå Žåãã¿ã¹ã¯ã¯ç Žæ£ãããŸãã |
| ThreadPoolExecutor.DiscardPolicy |
æåŠãããã¿ã¹ã¯ãéç¥ãªãã§ç Žæ£ããæåŠãããã¿ã¹ã¯ã®ãã³ãã©ã§ãã
|
| åæå | 説æ |
|---|---|
| TimeUnit |
TimeUnitã¯ãæå®ãããç²åºŠåäœã§ãã¥ã¬ãŒã·ã§ã³ã衚ããåäœã倿ãããããããã®åäœã§ã¿ã€ãã³ã°ããã³é
å»¶æäœãå®è¡ããããããŠãŒãã£ãªãã£ã»ã¡ãœãããæäŸããŸãã |
| äŸå€ | 説æ |
|---|---|
| BrokenBarrierException |
ã¹ã¬ãããæ
éç¶æ
ã«ããããªã¢ãŒãåŸ
æ©ããããšããŠãããšãããŸãã¯åŸ
æ©äžã«ããªã¢ãŒãæ
éç¶æ
ã«ãªã£ããšãã«ãäŸå€ãã¹ããŒããŸãã
|
| CancellationException |
FutureTaskãªã©ã®å€ãçæããã¿ã¹ã¯ã®çµæãããã®ã¿ã¹ã¯ãåãæ¶ãããããã«ååŸã§ããªãããšã瀺ãäŸå€ã§ãã |
| CompletionException |
çµæãŸãã¯ã¿ã¹ã¯ãå®äºããéçšã§ãšã©ãŒãŸãã¯ãã®ä»ã®äŸå€ãæ€åºããããšãã«ã¹ããŒãããäŸå€ã§ãã
|
| ExecutionException |
äŸå€ãã¹ããŒããããšã«ãã£ãŠäžæããã¿ã¹ã¯ã®çµæãååŸããããšãããšãã«ã¹ããŒãããäŸå€ã§ãã
|
| RejectedExecutionException |
ã¿ã¹ã¯ãå®è¡å¯Ÿè±¡ãšããŠåãå
¥ãäžå¯èœãªå Žåã«ã
Executorã«ãã£ãŠã¹ããŒãããäŸå€ã§ãã |
| TimeoutException |
ãããã¯æäœãã¿ã€ã ã»ã¢ãŠããããšãã«ã¹ããŒãããäŸå€ã§ãã
|
java.util.concurrent.locksããã±ãŒãžãšjava.util.concurrent.atomicããã±ãŒãžãåç
§ããŠãã ããã
Executorã¯ãã¹ã¬ããã«äŒŒãã«ã¹ã¿ã ã»ãµãã·ã¹ãã (ã¹ã¬ããã»ããŒã«ãéåæå
¥åºåã軜éã¿ã¹ã¯ã»ãã¬ãŒã ã¯ãŒã¯ãªã©)ãå®çŸ©ããããã®ãæšæºåãããåçŽãªã€ã³ã¿ãã§ãŒã¹ã§ãã 䜿çšããŠããå
·è±¡Executorã¯ã©ã¹ã«å¿ããŠãã¿ã¹ã¯ã¯æ°ããäœæãããã¹ã¬ãããæ¢åã®ã¿ã¹ã¯å®è¡ã¹ã¬ããããŸãã¯executeãåŒã³åºãã¹ã¬ããã§ãé æ¬¡ã«ãŸãã¯äžŠè¡ããŠå®è¡ãããŸãã ExecutorServiceã§ã¯ãããå®å
šãªéåæã¿ã¹ã¯å®è¡ãã¬ãŒã ã¯ãŒã¯ãçšæãããŠããŸãã ExecutorServiceã¯ãã¿ã¹ã¯ã®ãã¥ãŒã€ã³ã°ãšã¹ã±ãžã¥ãŒã«èšå®ã管çããå¶åŸ¡ãããã·ã£ããããŠã³ãå¯èœã«ããŸãã ScheduledExecutorServiceãµãã€ã³ã¿ãã§ãŒã¹ãšããã«é¢é£ä»ããããã€ã³ã¿ãã§ãŒã¹ã¯ãé
å»¶ããããŸãã¯å®æçãªã¿ã¹ã¯å®è¡ã®ãµããŒãã远å ãããŠããŸãã ExecutorServiceã«ã¯ãCallable (Runnableã«é¡äŒŒããçµæãçæ)ãšããŠè¡šãããä»»æã®é¢æ°ã®éåæå®è¡ã調æŽããã¡ãœãããçšæãããŠããŸãã Futureã¯ã颿°ã®çµæãè¿ããããå®è¡ãå®äºãããã©ããã®å€æãå¯èœã«ãããããã»ããå®è¡ãåãæ¶ãæ¹æ³ãæäŸããŸãã RunnableFutureã¯ãrunã¡ãœãããææããFutureã§ãå®è¡æã«ãã®çµæãèšå®ããŸãã
å®è£
ã ThreadPoolExecutorã¯ã©ã¹ãšScheduledThreadPoolExecutorã¯ã©ã¹ã¯ã調æŽå¯èœã§ãæè»ãªã¹ã¬ããã»ããŒã«ãæäŸããŸãã Executorsã¯ã©ã¹ã«ã¯ããã£ãšãäžè¬çãªExecutorã®çš®é¡ãšèšå®ã®ããã®ãã¡ã¯ããªã»ã¡ãœãããšããã®ãããªexecutorã䜿çšããããã®ãŠãŒãã£ãªãã£ã»ã¡ãœãããããã€ããããŸãã Executorsãåºã«ãããã®ä»ã®ãŠãŒãã£ãªãã£ã«ã¯ãFutureã®äžè¬çãªæ¡åŒµå¯èœãªå®è£
ãæäŸããå
·è±¡ã¯ã©ã¹FutureTaskããéåæã¿ã¹ã¯ã®ã°ã«ãŒãã®åŠçã®èª¿æŽãæ¯æŽããExecutorCompletionServiceãªã©ããããŸãã
ForkJoinPoolã¯ã©ã¹ã¯ãäž»ã«ForkJoinTaskãšãã®ãµãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãåŠçããããã«èšèšãããExecutorãæäŸããŸãã ãããã®ã¯ã©ã¹ã¯ãèšç®éã®å€ã䞊è¡åŠçã§ãã°ãã°é©çšãããå¶éã«åŸã£ãã¿ã¹ã¯ã§é«ãã¹ã«ãŒããããåŸããwork-stealingã¹ã±ãžã¥ãŒã©ã䜿çšããŸãã
ConcurrentLinkedQueueã¯ã©ã¹ã¯ãå¹ççã§ã¹ã±ãŒã©ãã«ãªãã¹ã¬ããã»ã»ãŒãã®éãããã¯FIFOãã¥ãŒãæäŸããŸãã ConcurrentLinkedDequeã¯ã©ã¹ãšã»ãŒåãã§ãããDequeã€ã³ã¿ãã§ãŒã¹ã远å ã§ãµããŒãããŸãã
java.util.concurrentå
ã®5ã€ã®å®è£
ãã€ãŸãLinkedBlockingQueueãArrayBlockingQueueãSynchronousQueueãPriorityBlockingQueueãããã³DelayQueueã¯ãputãštakeã®ãããã¯ã»ããŒãžã§ã³ãå®çŸ©ããæ¡åŒµãããBlockingQueueã€ã³ã¿ãã§ãŒã¹ããµããŒãããŸãã ããŸããŸãªã¯ã©ã¹ã§ããããã¥ãŒãµ - ã³ã³ã·ã¥ãŒããã¡ãã»ãŒãžã³ã°ã䞊åã¿ã¹ã¯å®è¡ãé¢é£ãã䞊è¡èšèšãªã©ã«å¯Ÿãããã£ãšãäžè¬çãªäœ¿çšã³ã³ããã¹ããç¶²çŸ
ããŸãã
æ¡åŒµãããTransferQueueã€ã³ã¿ãã§ãŒã¹ãããã³LinkedTransferQueueå®è£
ã§ã¯ããããã¥ãŒãµãå¿
èŠã«å¿ããŠãã®ã³ã³ã·ã¥ãŒãã®åŸ
æ©ããããã¯ã§ãããåætransferã¡ãœãã(ããã³é¢é£ããæ©èœ)ãå°å
¥ãããŸãã
BlockingDequeã€ã³ã¿ãã§ãŒã¹ã¯BlockingQueueãæ¡åŒµããŠãFIFOãšLIFO (ã¹ã¿ãã¯ã»ããŒã¹)ã®äž¡æ¹ã®ãªãã¬ãŒã·ã§ã³ããµããŒãããŸãã LinkedBlockingDequeã¯ã©ã¹ã¯ãå®è£
ãæäŸããŸãã
TimeUnitã¯ã©ã¹ã¯ãã¿ã€ã ã¢ãŠãã»ããŒã¹ã®ãªãã¬ãŒã·ã§ã³ã®æå®ããã³å¶åŸ¡ã«å¯ŸããŠãè€æ°ã®ç²åºŠ(ããç§åäœãŸã§)ãæäŸããŸãã ããã±ãŒãžã®ã»ãšãã©ã®ã¯ã©ã¹ã«ã¯ãç¡æéã«åŸ
æ©ãããªãã¬ãŒã·ã§ã³ã ãã§ãªããã¿ã€ã ã¢ãŠãã»ããŒã¹ã®ãªãã¬ãŒã·ã§ã³ãå«ãŸããŠããŸãã ã¿ã€ã ã»ã¢ãŠãã䜿çšãããã¹ãŠã®å Žåã§ãã¿ã€ã ã»ã¢ãŠãå€ã¯ãã¡ãœãããã¿ã€ã ã»ã¢ãŠãããããšã瀺ããŸã§åŸ
æ©ããæå°æéãæå®ããŸãã ã¿ã€ã ã»ã¢ãŠãã®çºçåŸã§ããã ãæ©ããããæ€åºããããã«ãå®è£
ã§ã¯ãæå€§éã®åªåããè¡ããŸãã ãã ããæ€åºãããã¿ã€ã ã»ã¢ãŠããããã®ã¿ã€ã ã»ã¢ãŠãåŸã«ã¹ã¬ãããå®éã«åå®è¡ããããŸã§ã«ã¯ãç¡æéã«æéãçµéããããšããããŸãã ã¿ã€ã ã¢ãŠãã»ãã©ã¡ãŒã¿ãåãå
¥ãããã¹ãŠã®ã¡ãœããã§ããŒã以äžã®å€ããŸã£ããåŸ
æ©ããªããã®ãšããŠæ±ããŸãã ãæ°žé ã«ãåŸ
æ©ããã«ã¯ãLong.MAX_VALUEã®å€ã䜿çšã§ããŸãã
Semaphoreã¯ãåŸæ¥ã®äžŠè¡åŠçããŒã«ã§ãã
CountDownLatchã¯ãéåžžã«åçŽã§ãããã䜿ããããŠãŒãã£ãªãã£ã§ãæå®ãããæ°ã®ã·ã°ãã«ãã€ãã³ãããŸãã¯æ¡ä»¶ãä¿æãããŸã§ãããã¯ããŸãã
CyclicBarrierã¯ããªã»ããå¯èœãªå€çšéã®åæãã€ã³ãã§ãããäžéšã®åœ¢åŒã®äžŠè¡ããã°ã©ãã³ã°ã§æçšã§ãã
Phaserã¯ãè€æ°ã®ã¹ã¬ããã«ãããæ®µéçãªèšç®ãå¶åŸ¡ããããã«äœ¿çšã§ãããããæè»ãªåœ¢åŒã®ããªã¢ãŒãæäŸããŸãã
Exchangerã§ã¯ã2ã€ã®ã¹ã¬ãããã©ã³ãããŒã»ãã€ã³ãã§ãªããžã§ã¯ãã亀æããããã«ã§ããŸããããã¯ãããã€ãã®ãã€ãã©ã€ã³èšèšã§æçšã§ãã
ConcurrentHashMapãConcurrentSkipListMapãConcurrentSkipListSetãCopyOnWriteArrayListãããã³CopyOnWriteArraySetãæäŸãããŸãã ç¹å®ã®ã³ã¬ã¯ã·ã§ã³ã«å€æ°ã®ã¹ã¬ãããã¢ã¯ã»ã¹ããããšãæ³å®ãããå Žåã¯ãéåžžãåæãããHashMapãããConcurrentHashMapãåæãããTreeMapãããConcurrentSkipListMapã䜿çšããããšããèŠãããŸãã èªã¿èŸŒã¿ãšãã©ããŒãµã«ã®äºæ³æ°ããªã¹ãã®æŽæ°æ°ããã¯ããã«å€ãå Žåã¯ãåæãããArrayListããCopyOnWriteArrayListã䜿çšããããšããèŠãããŸãã
ãã®ããã±ãŒãžã®äžéšã®ã¯ã©ã¹ã«äœ¿çšããããConcurrentãæ¥é èŸã¯ãé¡äŒŒãããsynchronizedãã¯ã©ã¹ãšã¯ç°ãªãç¹ãããã€ãããããšãç°¡æœã«è¡šãããã®ãã®ã§ãã ããšãã°ãjava.util.HashtableãšCollections.synchronizedMap(new HashMap())ã¯åæãããŸãã ããããConcurrentHashMapã¯äžŠè¡ã§ãã 䞊è¡åŠçã³ã¬ã¯ã·ã§ã³ã¯ã¹ã¬ããã»ã»ãŒãã§ãããåäžã®æä»ããã¯ã«ããå¶åŸ¡ãåããŸããã ConcurrentHashMapã®å Žåã¯ãä»»æã®æ°ã®äžŠè¡èªã¿èŸŒã¿ãšã調æŽå¯èœãªæ°ã®äžŠè¡æžèŸŒã¿ãå®å
šã«èš±å¯ããŸãã ãsynchronizedãã¯ã©ã¹ã¯ãã³ã¬ã¯ã·ã§ã³ãžã®ãã¹ãŠã®ã¢ã¯ã»ã¹ãåäžããã¯ã§é²ãå¿
èŠãããå Žåã«åœ¹ç«ã¡ãŸãããã ããã¹ã±ãŒã©ããªãã£ã¯äœäžããŸãã äžæ¹ãè€æ°ã®ã¹ã¬ãããå
±éã®ã³ã¬ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ããããšãäºæ³ãããå Žåãéåžžã¯ãconcurrentãããŒãžã§ã³ãé©åã§ãã ã³ã¬ã¯ã·ã§ã³ãå
±æãããŠããªãå ŽåããŸãã¯å¥ã®ããã¯ãä¿æããŠãããšãã«ã®ã¿ã³ã¬ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹å¯èœã§ããå Žåã¯ãåæãããŠããªãã³ã¬ã¯ã·ã§ã³ã䜿ãããšããèŠãããŸãã
ã»ãšãã©ã®äžŠè¡åŠçCollectionå®è£
(ã»ãšãã©ã®Queueãå«ã)ã¯ããããã®ã€ãã¬ãŒã¿ããã³ã¹ããªããã¬ãŒã¿ããã§ã€ã«ãã¡ã¹ãã®ãã©ããŒãµã«ã§ã¯ãªã匱äžè²«æ§ãæäŸããç¹ã§ãéåžžã®java.utilèŠåãšãç°ãªããŸãã
ConcurrentModificationExceptionãã¹ããŒããŸããã
synchronizedæ§æãšvolatileæ§æã®ã»ããThread.start()ã¡ãœãããšThread.join()ã¡ãœãããhappens-beforeé¢ä¿ã圢æã§ããŸãã ç¹ã«æ¬¡ã®ç¹ãéèŠã§ãã
synchronizedãããã¯ãŸãã¯ã¡ãœããã®çµäº)ã¯ãåãã¢ãã¿ãŒã§ã®ä»¥éã®ã©ã®ããã¯(synchronizedãããã¯ãŸãã¯ã¡ãœããã®ãšã³ããª)ãããåã«çºçããŸãã ãŸããhappens-beforeé¢ä¿ã¯æšç§»çã§ãããããããã¯è§£é€ã®åã®ã¹ã¬ããã®ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ããã®ã¢ãã¿ãŒãããã¯ããããããã¹ã¬ããã«ç¶ããã¹ãŠã®ã¢ã¯ã·ã§ã³ã®åã«çºçããŸãã
volatileãã£ãŒã«ããžã®æžèŸŒã¿ã¯ããã®åããã£ãŒã«ãã®ä»¥éã®ã©ã®èªã¿åããããåã«çºçããŸãã volatileãã£ãŒã«ãã®æžã蟌ã¿ãšèªåãã«ã¯ãã¢ãã¿ãŒã®ãšã³ããªããã³çµäºãšåæ§ã®ã¡ã¢ãªãŒæŽåæ§å¹æããããŸãããçžäºæä»ããã¯ã¯äŒŽããŸããã
startã®åŒåºãã¯ãéå§ãããã¹ã¬ããå
ã®ããããã¢ã¯ã·ã§ã³ã®åã«çºçããŸãã
joinããã»ãã®ã¹ã¬ãããæ£åžžã«åŸ©åž°ããåã«çºçããŸãã
java.util.concurrentãšãã®ãµãããã±ãŒãžå
ã®ãã¹ãŠã®ã¯ã©ã¹ã®ã¡ãœããã¯ããããã®ä¿èšŒãããé«ãã¬ãã«ã®åæã«ãŸã§æ¡åŒµããŸãã ç¹ã«æ¬¡ã®ç¹ãéèŠã§ãã
RunnableãExecutorã«éä¿¡ããåã®ã¹ã¬ããå
ã®ã¢ã¯ã·ã§ã³ã¯ããã®å®è¡ãéå§ãããåã«çºçããŸãã ExecutorServiceã«éä¿¡ãããCallablesã«ã€ããŠãåæ§ã§ãã
Futureã§è¡šãããéåæèšç®ã«ãã£ãŠå®è¡ãããã¢ã¯ã·ã§ã³ã¯ãå¥ã®ã¹ã¬ããå
ã®Future.get()ã«ããçµæã®ååŸã«ç¶ãã¢ã¯ã·ã§ã³ã®åã«çºçããŸãã
Lock.unlockãSemaphore.releaseãCountDownLatch.countDownãªã©ã®ã·ã³ã¯ããã€ã¶ãè§£æŸãã¡ãœããã®åã®ã¢ã¯ã·ã§ã³ã¯ãå¥ã®ã¹ã¬ããå
ã®åãã·ã³ã¯ããã€ã¶ã»ãªããžã§ã¯ãã«å¯ŸããLock.lockãSemaphore.acquireãCondition.awaitãCountDownLatch.awaitãªã©ã®æ£åžžçµäºãããååŸãã¡ãœããã«ç¶ãã¢ã¯ã·ã§ã³ã®åã«çºçããŸãã
Exchangerãä»ããŠãªããžã§ã¯ããæ£åžžã«äº€æããã¹ã¬ããã®ãã¢ããšã«ãåã¹ã¬ããå
ã®exchange()ã®åã®ã¢ã¯ã·ã§ã³ã¯ãããäžæ¹ã®ã¹ã¬ããå
ã®å¯Ÿå¿ããexchange()ã«ç¶ãã¢ã¯ã·ã§ã³ã®åã«çºçããŸãã
CyclicBarrier.awaitãšPhaser.awaitAdvance (ããã³ãã®ããªã¢ã³ã)ãåŒã³åºãåã®ã¢ã¯ã·ã§ã³ã¯ãããªã¢ãŒã»ã¢ã¯ã·ã§ã³ã«ãã£ãŠå®è¡ãããã¢ã¯ã·ã§ã³ã®åã«çºçãããã®ããªã¢ãŒã»ã¢ã¯ã·ã§ã³ã«ãã£ãŠå®è¡ãããã¢ã¯ã·ã§ã³ã¯ãã»ãã®ã¹ã¬ããå
ã®å¯Ÿå¿ããawaitããã®æ£åžžãªåŸ©åž°ã«ç¶ãã¢ã¯ã·ã§ã³ã®åã«çºçããŸãã
ãã°ãŸãã¯æ©èœãéä¿¡
詳现ãªAPIãªãã¡ã¬ã³ã¹ããã³éçºè
ããã¥ã¡ã³ãã«ã€ããŠã¯ãJava SEã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãã®ããã¥ã¡ã³ãã«ã¯ãæŠå¿µçãªæŠèŠãçšèªã®å®çŸ©ãåé¿æ¹æ³ãæå¹ãªã³ãŒãäŸãªã©ã®ãéçºè
ã察象ã«ãããã詳现ãªèª¬æãå«ãŸããŠããŸãã
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyãåç
§ããŠãã ããã