クラスForkJoinTask<V>
- 型パラメータ:
V- タスクã®çµæžœã®ã‚¿ã‚¤ãƒ—
- ã™ã¹ã¦ã®å®Ÿè£…ã•れãŸã‚¤ãƒ³ã‚¿ãƒ•ェース:
Serializable,Future<V>
- ç›´ç³»ã®æ—¢çŸ¥ã®ã‚µãƒ–クラス:
CountedCompleter,RecursiveAction,RecursiveTask
ForkJoinPool内ã§å®Ÿè¡Œã™ã‚‹æŠ½è±¡åŸºåº•クラスã§ã™ã€‚ ForkJoinTaskã¯ã€é€šå¸¸ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚ˆã‚Šã¯ã‚‹ã‹ã«è»½é‡ãªã€ã‚¹ãƒ¬ãƒƒãƒ‰ã«ä¼¼ãŸã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ã§ã™ã€‚ ã‚る程度ã®ä½¿ç”¨åˆ¶é™ã‚’çŠ ç‰²ã«ã—ã¦ã€ForkJoinPool内ã®å°‘ãªã„æ•°ã®å®Ÿéš›ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã€è†¨å¤§ãªæ•°ã®ã‚¿ã‚¹ã‚¯ã‚„サブタスクをホストã§ãã¾ã™ã€‚
メインã®ForkJoinTaskã¯ã€ForkJoinPoolã«æ˜Žç¤ºçš„ã«é€ä¿¡ã•れãŸã¨ãã«å®Ÿè¡Œã‚’é–‹å§‹ã—ã¾ã™ã€‚ForkJoinã®è¨ˆç®—ã«ã¾ã 関与ã—ã¦ã„ãªã„å ´åˆã¯ã€fork()ã€invoke()ã¾ãŸã¯é–¢é€£ãƒ¡ã‚½ãƒƒãƒ‰ã‚’介ã—ã¦ForkJoinPool.commonPool()ã§é–‹å§‹ã•れã¾ã™ã€‚ èµ·å‹•ã•れãŸã‚ã¨ã€é€šå¸¸ã¯æ¬¡ã«ã€ã»ã‹ã®ã‚µãƒ–タスクを起動ã—ã¾ã™ã€‚ ã“ã®ã‚¯ãƒ©ã‚¹ã®åå‰ã§ç¤ºã•れã¦ã„るよã†ã«ã€ForkJoinTaskを使用ã—ã¦ã„る多ãã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¯fork()メソッドã¨join()メソッドã€ã¾ãŸã¯invokeAllãªã©ã®æ´¾ç”Ÿãƒ¡ã‚½ãƒƒãƒ‰ã®ã¿ã‚’使用ã—ã¾ã™ã€‚ ãŸã ã—ã€ã“ã®ã‚¯ãƒ©ã‚¹ã¯ã¾ãŸã€é«˜åº¦ãªä½¿ç”¨æ–¹æ³•ã§åŠ¹æžœã‚’ç™ºæ®ã™ã‚‹ãã®ä»–ã®ã„ãã¤ã‹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚„ã€æ–°ã—ã„å½¢å¼ã®åˆ†å²/çµåˆå‡¦ç†ã®ã‚µãƒãƒ¼ãƒˆã‚’å¯èƒ½ã«ã™ã‚‹æ‹¡å¼µæ©Ÿèƒ½ã‚‚æä¾›ã—ã¾ã™ã€‚
ForkJoinTaskã¯ã€è»½é‡ãªå½¢å¼ã®Futureã§ã™ã€‚ ForkJoinTaskã®åŠ¹çŽ‡ã¯ã€ç´”粋ãªé–¢æ•°ã‚’計算ã™ã‚‹ã‹ã€ã¾ãŸã¯ç´”粋ã«åˆ‡ã‚Šé›¢ã•れãŸã‚ªãƒ–ジェクトã«å¯¾ã—ã¦å‹•作ã™ã‚‹ã¨ã„ã†ã€è¨ˆç®—タスクã¨ã—ã¦ã®ä¸»è¦ãªä½¿ç”¨æ–¹æ³•ã‚’åæ˜ ã™ã‚‹(部分的ã«é™çš„ã«ã—ã‹å¼·åˆ¶ã§ããªã„)一連ã®åˆ¶é™ã‹ã‚‰å¾—られã¾ã™ã€‚ 主ãªèª¿æ•´ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã«ã¯ã€éžåŒæœŸå®Ÿè¡Œã‚’調整ã™ã‚‹fork()ã‚„ã€ã‚¿ã‚¹ã‚¯ã®çµæžœãŒè¨ˆç®—ã•れるã¾ã§å‡¦ç†ã‚’続行ã—ãªã„join()ãŒã‚りã¾ã™ã€‚ 計算ã¯ã€ç†æƒ³çš„ã«ã¯synchronizedメソッドã¾ãŸã¯ãƒ–ãƒãƒƒã‚¯ã‚’回é¿ã™ã‚‹ã¹ãã§ã‚りã€ã¾ãŸä»–ã®ã‚¿ã‚¹ã‚¯ã®çµåˆã‚„ã€åˆ†å²/çµåˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°ã¨é€£æºã™ã‚‹ãŸã‚ã«é€šçŸ¥ã•れるPhaserãªã©ã®ã‚·ãƒ³ã‚¯ãƒãƒŠã‚¤ã‚¶ã®ä½¿ç”¨ã‚’除ãã€ãã®ä»–ã®åŒæœŸã®ãƒ–ãƒãƒƒã‚¯ã‚’最å°é™ã«æŠ‘ãˆã‚‹ã¹ãã§ã™ã€‚ 分割å¯èƒ½ãªã‚¿ã‚¹ã‚¯ã‚‚ã¾ãŸã€å…¥å‡ºåŠ›ã®ãƒ–ãƒãƒƒã‚¯ã‚’実行ã™ã‚‹ã¹ãã§ã¯ãªãã€ã¾ãŸç†æƒ³çš„ã«ã¯å®Ÿè¡Œä¸ã®ä»–ã®ã‚¿ã‚¹ã‚¯ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã•れる変数ã¨ã¯å®Œå…¨ã«ç‹¬ç«‹ã—ã¦ã„る変数ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¹ãã§ã™ã€‚ ã“れらã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã¯ã€IOExceptionsãªã©ã®ãƒã‚§ãƒƒã‚¯ä¾‹å¤–をスãƒãƒ¼ã§ããªã„よã†ã«ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ç·©ã‚„ã‹ã«é©ç”¨ã•れã¾ã™ã€‚ ãŸã ã—ã€è¨ˆç®—ã§ã¯ã€çµåˆã—よã†ã¨ã—ã¦ã„る呼出ã—å´ã«å†ã‚¹ãƒãƒ¼ã•れるéžãƒã‚§ãƒƒã‚¯ä¾‹å¤–ãŒå¼•ãç¶šã発生ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã“れらã®ä¾‹å¤–ã«ã¯ã€ã•らã«ã€å†…部タスク・ã‚ューã®å‰²å½“ã¦å¤±æ•—ãªã©ã®å†…部リソースã®ä¸è¶³ã«ã‚ˆã£ã¦ç”Ÿæˆã•れるRejectedExecutionExceptionãŒå«ã¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ å†ã‚¹ãƒãƒ¼ã•れãŸä¾‹å¤–ã¯é€šå¸¸ã®ä¾‹å¤–ã¨åŒã˜ã‚ˆã†ã«å‹•作ã—ã¾ã™ãŒã€å¯èƒ½ãªå ´åˆã¯ã€è¨ˆç®—ã‚’é–‹å§‹ã—ãŸã‚¹ãƒ¬ãƒƒãƒ‰ã¨å®Ÿéš›ã«ä¾‹å¤–ãŒç™ºç”Ÿã—ã¦ã„るスレッドã®ä¸¡æ–¹(最å°é™ã¨ã—ã¦ã¯å¾Œè€…ã®ã¿)ã®(ãŸã¨ãˆã°ã€ex.printStackTrace()を使用ã—ã¦è¡¨ç¤ºã•れãŸ)スタック・トレースをå«ã¿ã¾ã™ã€‚
ブãƒãƒƒã‚¯ã™ã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹ForkJoinTasksを定義ã—ã¦ä½¿ç”¨ã§ãã¾ã™ãŒã€ã“れを行ã†ã«ã¯ã•らã«3ã¤ã®è€ƒæ…®äº‹é …ãŒå¿…è¦ã§ã™: (1) otherタスクãŒå¤–éƒ¨åŒæœŸã¾ãŸã¯I/Oをブãƒãƒƒã‚¯ã™ã‚‹ã‚¿ã‚¹ã‚¯ã«ä¾å˜ã™ã‚‹å ´åˆã€å°‘æ•°ã®å®Œäº†ã€‚ çµåˆã•れãªã„イベント形å¼ã®éžåŒæœŸã‚¿ã‚¹ã‚¯(ãŸã¨ãˆã°ã€CountedCompleterをサブクラス化ã™ã‚‹ã‚‚ã®)ã¯ã€å¤šãã®å ´åˆã“ã®ã‚«ãƒ†ã‚´ãƒªã«å…¥ã‚Šã¾ã™ã€‚(2)リソースã¸ã®å½±éŸ¿ã‚’最å°é™ã«æŠ‘ãˆã‚‹ã«ã¯ã€ã‚¿ã‚¹ã‚¯ã‚’å°ã•ãã—ã¦ã€ç†æƒ³çš„ã«ã¯(ãŠãらã)ブãƒãƒƒã‚¯ãƒ»ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã—ã‹å®Ÿè¡Œã—ãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚(3) ForkJoinPool.ManagedBlocker APIを使用ã—ãªã„å ´åˆã‚„ã€ãƒ–ãƒãƒƒã‚¯ã•れるå¯èƒ½æ€§ãŒã‚ã‚‹ã‚¿ã‚¹ã‚¯ã®æ•°ãŒãƒ—ールã®ForkJoinPool.getParallelism()ã®ãƒ¬ãƒ™ãƒ«ã‚ˆã‚Šå°ã•ã„ã“ã¨ãŒã‚ã‹ã£ã¦ã„ã‚‹å ´åˆã€ãã®ãƒ—ールã§ã¯ã€å‡¦ç†ã®é€²è¡Œã‚„良好ãªãƒ‘フォーマンスを確ä¿ã™ã‚‹ã ã‘ã®å分ãªã‚¹ãƒ¬ãƒƒãƒ‰ãŒä½¿ç”¨ã§ãã‚‹ã“ã¨ã‚’ä¿è¨¼ã§ãã¾ã›ã‚“。
完了を待機ã—ã€ã‚¿ã‚¹ã‚¯ã®çµæžœã‚’抽出ã™ã‚‹ãŸã‚ã®ä¸»è¦ãƒ¡ã‚½ãƒƒãƒ‰ã¯join()ã§ã™ãŒã€ã„ãã¤ã‹ã®ãƒãƒªã‚¢ãƒ³ãƒˆãŒå˜åœ¨ã—ã¾ã™ã€‚Future.get()メソッドã¯ã€å®Œäº†ã«å¯¾ã™ã‚‹å‰²è¾¼ã¿å¯èƒ½ãªå¾…機ã¾ãŸã¯æ™‚間指定ã•れãŸå¾…機ã€ã‚ã‚‹ã„ã¯ãã®ä¸¡æ–¹ã‚’サãƒãƒ¼ãƒˆã—ã€Futureã®è¦å‰‡ã‚’使用ã—ã¦çµæžœã‚’å ±å‘Šã—ã¾ã™ã€‚ invoke()メソッドã¯ã€æ„味的ã«ã¯fork(); join()ã¨åŒç‰ã§ã™ãŒã€å¸¸ã«ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§å®Ÿè¡Œã‚’é–‹å§‹ã—よã†ã¨ã—ã¾ã™ã€‚ ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ã€Œéžå‡ºåŠ›ã€å½¢å¼ã¯ã€çµæžœã‚’抽出ã›ãšã€ä¾‹å¤–ã‚‚å ±å‘Šã—ã¾ã›ã‚“。 ã“れらã¯ã€ä¸€é€£ã®ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れã¦ã„ã¦ã€ãã®ã™ã¹ã¦ãŒå®Œäº†ã™ã‚‹ã¾ã§çµæžœã¾ãŸã¯ä¾‹å¤–ã®å‡¦ç†ã‚’é…らã›ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«å½¹ç«‹ã¤ã“ã¨ãŒã‚りã¾ã™ã€‚ invokeAllメソッド(複数ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ä½¿ç”¨å¯èƒ½)ã¯ã€ã‚‚ã£ã¨ã‚‚一般的ãªå½¢å¼ã®ä¸¦åˆ—呼出ã—ã€ã¤ã¾ã‚Šä¸€é€£ã®ã‚¿ã‚¹ã‚¯ã®ãƒ•ォークã¨ã€ãã®ã™ã¹ã¦ã®çµåˆã‚’実行ã—ã¾ã™ã€‚
ã‚‚ã£ã¨ã‚‚一般的ãªç”¨é€”ã§ã¯ã€åˆ†å²/çµåˆãƒšã‚¢ãŒä¸¦åˆ—çš„ãªå†å¸°é–¢æ•°ã‹ã‚‰ã®å‘¼å‡ºã—(分å²)ã¨å¾©å¸°(çµåˆ)ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚ ä»–ã®å½¢å¼ã®å†å¸°å‘¼å‡ºã—ã¨åŒæ§˜ã«ã€å¾©å¸°(çµåˆ)ã¯ã‚‚ã£ã¨ã‚‚æ·±ã„ã‚‚ã®ã‚’最åˆã«å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ãŸã¨ãˆã°ã€a.fork(); b.fork(); b.join(); a.join();ã¯ã€bã®å‰ã«aã‚’çµåˆã™ã‚‹ã‚ˆã‚Šã€ã‹ãªã‚ŠåŠ¹çŽ‡çš„ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
タスクã®å®Ÿè¡Œã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€ã„ãã¤ã‹ã®è©³ç´°ãƒ¬ãƒ™ãƒ«ã§ç…§ä¼šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™: isDone()ã¯ã€ã‚¿ã‚¹ã‚¯ãŒãªã‚“らã‹ã®æ–¹æ³•ã§(タスクãŒå®Ÿè¡Œã•れãšã«å–消ã•れãŸå ´åˆ)ã§å®Œäº†ã—ãŸå ´åˆã«ã¯trueã§ã™ã€‚isCompletedNormally()ã¯ã€å–消ã—ã¾ãŸã¯ä¾‹å¤–ãŒç™ºç”Ÿã›ãšã«å®Œäº†ã—ãŸå ´åˆã«ã¯trueã§ã™ã€‚isCancelled()ã¯ã€ã‚¿ã‚¹ã‚¯ãŒ(ã“ã®å ´åˆã€getException(boolean)ã¯CancellationExceptionã‚’è¿”ã—ã¾ã™ã€‚)ã§å–り消ã•れãŸå ´åˆã«ã¯trueã§ã€ã‚¿ã‚¹ã‚¯ãŒå–り消ã•れãŸå ´åˆã¾ãŸã¯ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯isCompletedAbnormally()ãŒtrueã§ã™ã€‚ã“ã®å ´åˆã€getException(boolean)ã¯ã€æ¤œå‡ºã•れãŸä¾‹å¤–ã¾ãŸã¯CancellationExceptionã‚’è¿”ã—ã¾ã™ã€‚
ForkJoinTaskクラスã¯é€šå¸¸ã€ç›´æŽ¥ã«ã¯ã‚µãƒ–クラス化ã•れã¾ã›ã‚“。 ã‹ã‚りã«ã€ç‰¹å®šã®ã‚¹ã‚¿ã‚¤ãƒ«ã®åˆ†å²/çµåˆå‡¦ç†ã‚’サãƒãƒ¼ãƒˆã™ã‚‹æŠ½è±¡ã‚¯ãƒ©ã‚¹ã®ã„ãšã‚Œã‹ã‚’サブクラス化ã—ã¾ã™ã€‚ã“れã¯é€šå¸¸ã€çµæžœã‚’è¿”ã•ãªã„ã»ã¨ã‚“ã©ã®è¨ˆç®—ã®å ´åˆã¯RecursiveActionã€çµæžœã‚’è¿”ã™è¨ˆç®—ã®å ´åˆã¯RecursiveTaskã€å®Œäº†ã—ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒä»–ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’トリガーã™ã‚‹è¨ˆç®—ã®å ´åˆã¯CountedCompleterã§ã™ã€‚ 通常ã€å…·è±¡ForkJoinTaskサブクラスã¯ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã§ç¢ºç«‹ã•れãŸãƒ‘ラメータã‹ã‚‰æˆã‚‹ãƒ•ィールドを宣言ã—ã¦ã‹ã‚‰ã€ã“ã®åŸºåº•クラスã«ã‚ˆã£ã¦æä¾›ã•れる制御メソッドを何らã‹ã®æ–¹æ³•ã§ä½¿ç”¨ã™ã‚‹computeメソッドを定義ã—ã¾ã™ã€‚
join()メソッドã¨ãã®ãƒãƒªã‚¢ãƒ³ãƒˆãŒä½¿ç”¨ã«é©ã—ã¦ã„ã‚‹ã®ã¯ã€å®Œäº†ã®ä¾å˜é–¢ä¿‚ãŒéžå¾ªç’°å¼ã§ã‚ã‚‹å ´åˆã€ã¤ã¾ã‚Šã€ä¸¦åˆ—計算を無閉路有å‘グラフ(DAG)ã¨ã—ã¦è¨˜è¿°ã§ãã‚‹å ´åˆã ã‘ã§ã™ã€‚ ãれ以外ã®å ´åˆã¯ã€ã‚¿ã‚¹ã‚¯ãŒå¾ªç’°çš„ã«äº’ã„を待機ã™ã‚‹ãŸã‚ã€å®Ÿè¡Œã«ã‚ˆã£ã¦ã‚る種ã®ãƒ‡ãƒƒãƒ‰ãƒãƒƒã‚¯ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ãŸã ã—ã€ã“ã®ãƒ•レームワークã§ã¯ã€DAGã¨ã—ã¦é™çš„ã«æ§‹é€ 化ã•れãªã„å•題ã®ãŸã‚ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ»ã‚µãƒ–ã‚¯ãƒ©ã‚¹ã®æ§‹ç¯‰ã«å½¹ç«‹ã¤å¯èƒ½æ€§ã®ã‚ã‚‹ãã®ä»–ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚„手法(ãŸã¨ãˆã°ã€Phaserã€helpQuiesce()ã€ãŠã‚ˆã³complete(V)ã®ä½¿ç”¨)ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚ ã“ã®ã‚ˆã†ãªç”¨é€”をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã€setForkJoinTaskTag(short)ã¾ãŸã¯compareAndSetForkJoinTaskTag(short, short)を使用ã—ã¦ForkJoinTaskã‚’short値ã§åŽŸåçš„ã«ã‚¿ã‚°ä»˜ã‘ã—ã€getForkJoinTaskTag()を使用ã—ã¦ç¢ºèªã§ãã¾ã™ã€‚ ForkJoinTaskã®å®Ÿè£…ã§ã¯ã€ã“れらã®protectedメソッドã¾ãŸã¯ã‚¿ã‚°ã¯ã©ã®ã‚ˆã†ãªç›®çš„ã«ã‚‚使用ã•れã¾ã›ã‚“ãŒã€ç‰¹åŒ–ã•れãŸã‚µãƒ–クラスを構築ã™ã‚‹ã¨ãã«å½¹ç«‹ã¤å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ãŸã¨ãˆã°ã€ä¸¦åˆ—çš„ãªã‚°ãƒ©ãƒ•ã®ãƒˆãƒ©ãƒãƒ¼ã‚¹ã§ã¯ã€æŒ‡å®šã•れãŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã—ã¦ã€ã™ã§ã«å‡¦ç†ã•れã¦ã„るノードã¾ãŸã¯ã‚¿ã‚¹ã‚¯ã®å†ãƒã‚§ãƒƒã‚¯ã‚’回é¿ã§ãã¾ã™ã€‚ (タグ付ã‘ã®ãƒ¡ã‚½ãƒƒãƒ‰åã¯éƒ¨åˆ†çš„ã«å¤§ãããªã‚‹ãŸã‚ã€ãれãžã‚Œã®ä½¿ç”¨ãƒ‘ã‚¿ãƒ¼ãƒ³ã‚’åæ˜ ã—ãŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã™ã‚‹ã“ã¨ã‚’ãŠè–¦ã‚ã—ã¾ã™ã€‚)
基本ã¨ãªã‚‹è»½é‡ã‚¿ã‚¹ã‚¯ãƒ»ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°ãƒ»ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ã«æœ¬è³ªçš„ã«çµã³ä»˜ã‘られãŸå®Ÿè£…ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’回é¿ã™ã‚‹ãŸã‚ã«ã€ã»ã¨ã‚“ã©ã®åŸºæœ¬ã‚µãƒãƒ¼ãƒˆãƒ»ãƒ¡ã‚½ãƒƒãƒ‰ã¯finalã§ã™ã€‚ æ–°ã—ã„基本的ãªã‚¹ã‚¿ã‚¤ãƒ«ã®åˆ†å²/çµåˆå‡¦ç†ã‚’作æˆã—ã¦ã„る開発者ã¯ã€protectedメソッドã€exec()ã€setRawResult(V)ã€ãŠã‚ˆã³getRawResult()ã®å®Ÿè£…を最å°é™ã«ã™ã‚‹ä¸€æ–¹ã§ã€ãã®ã‚µãƒ–クラスã§(ãŠãらãã€ã“ã®ã‚¯ãƒ©ã‚¹ã«ã‚ˆã£ã¦æä¾›ã•れるã»ã‹ã®protectedメソッドを使用ã—ã¦)実装ã§ãる抽象計算メソッドも導入ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。
ForkJoinTaskã§ã¯ã€æ¯”較的少ãªã„é‡ã®è¨ˆç®—を実行ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 大ããªã‚¿ã‚¹ã‚¯ã¯ã€é€šå¸¸ã¯å†å¸°çš„分解を使用ã—ã¦ã€ã‚ˆã‚Šå°ã•ãªã‚µãƒ–タスクã«åˆ†å‰²ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 éžå¸¸ã«å¤§ã¾ã‹ãªçµŒé¨“則ã¨ã—ã¦ã€1ã¤ã®ã‚¿ã‚¹ã‚¯ã§ã¯100より多ã10000より少ãªã„基本的ãªè¨ˆç®—ステップを実行ã™ã‚‹ã‚ˆã†ã«ã—ã€ç„¡æœŸé™ãƒ«ãƒ¼ãƒ—を回é¿ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 タスクãŒå¤§ãã™ãŽã‚‹ã¨ã€ä¸¦åˆ—性ã«ã‚ˆã£ã¦ã‚¹ãƒ«ãƒ¼ãƒ—ットをå‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 å°ã•ã™ãŽã‚‹ã¨ã€ãƒ¡ãƒ¢ãƒªãƒ¼ã‚„内部タスクä¿å®ˆã®ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ã«ã‚ˆã£ã¦å‡¦ç†åŠ¹çŽ‡ãŒä½Žä¸‹ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
ã“ã®ã‚¯ãƒ©ã‚¹ã¯ã€ForkJoinTasksã®å®Ÿè¡Œã‚’ã»ã‹ã®ç¨®é¡žã®ã‚¿ã‚¹ã‚¯ã¨æ··åœ¨ã•ã›ã‚‹ã¨ãã«å½¹ç«‹ã¤å¯èƒ½æ€§ã®ã‚ã‚‹ã€RunnableãŠã‚ˆã³Callableã®ãŸã‚ã®adaptメソッドをæä¾›ã—ã¾ã™ã€‚ ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ãŒã“ã®å½¢å¼ã§ã‚ã‚‹å ´åˆã¯ã€asyncModeã§æ§‹ç¯‰ã•れãŸãƒ—ールã®ä½¿ç”¨ã‚’検討ã—ã¦ãã ã•ã„。
ForkJoinTaskã¯Serializableã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒªãƒ¢ãƒ¼ãƒˆå®Ÿè¡Œãƒ•レームワークãªã©ã®æ‹¡å¼µæ©Ÿèƒ½ã§ä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ タスクã®ç›´åˆ—化ã¯ã€å®Ÿè¡Œä¸ã§ã¯ãªãã€å®Ÿè¡Œã®å‰ã¾ãŸã¯ã‚ã¨ã«ã®ã¿è¡Œã†ã®ãŒé©åˆ‡ã§ã™ã€‚ 実行ä¸ã¯ç›´åˆ—化自体ãŒä½¿ç”¨ã•れã¾ã›ã‚“。
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 1.7
- é–¢é€£é …ç›®:
-
ãƒã‚¹ãƒˆã•れãŸã‚¯ãƒ©ã‚¹ã®ã‚µãƒžãƒªãƒ¼
インタフェースjava.util.concurrent.Futureã§å®£è¨€ã•れãŸãƒã‚¹ãƒˆã•れãŸã‚¯ãƒ©ã‚¹/インタフェース
Future.State -
コンストラクタã®ã‚µãƒžãƒªãƒ¼
コンストラクタコンストラクタ説明サブクラスãŒå‘¼ã³å‡ºã™ãŸã‚ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã€‚ -
メソッドã®ã‚µãƒžãƒªãƒ¼
修飾åã¨åž‹ãƒ¡ã‚½ãƒƒãƒ‰èª¬æ˜Žstatic ForkJoinTask<?> 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()実行時ã«nullã®çµæžœã‚’è¿”ã—ã¾ã™ã€‚static <T> ForkJoinTask<T> 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()å®Ÿè¡Œæ™‚ã«æŒ‡å®šã•れãŸçµæžœã‚’è¿”ã—ã¾ã™ã€‚static <T> ForkJoinTask<T> 指定ã•れãŸCallableã®callメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€ãã®çµæžœã‚’join()実行時ã«è¿”ã—ã€ç™ºç”Ÿã—ãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚static ForkJoinTask<?> adaptInterruptible(Runnable runnable) 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()ã§nullã‚’è¿”ã—ã€æ¤œå‡ºã•れãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚static <T> ForkJoinTask<T> adaptInterruptible(Runnable runnable, T result) 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()ã§æŒ‡å®šã—ãŸçµæžœã‚’è¿”ã—ã€æ¤œå‡ºã•れãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚static <T> ForkJoinTask<T> adaptInterruptible(Callable<? extends T> callable) 指定ã•れãŸCallableã®callメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€ãã®çµæžœã‚’join()実行時ã«è¿”ã—ã€ç™ºç”Ÿã—ãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚booleancancel(boolean mayInterruptIfRunning) ã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã®å–消ã—を試ã¿ã¾ã™ã€‚final booleancompareAndSetForkJoinTaskTag(short expect, short update) ã“ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°å€¤ã‚’原åçš„ã«æ¡ä»¶ä»˜ãã§è¨å®šã—ã¾ã™ã€‚voidã“ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ä¸æ–ã¾ãŸã¯å–り消ã—ã•れã¦ã„ãªã„å ´åˆã€joinã®å¾Œç¶šã®å‘¼ã³å‡ºã—ãŠã‚ˆã³é–¢é€£ã®æ“作ã®çµæžœã¨ã—ã¦æŒ‡å®šã•れãŸå€¤ã‚’è¿”ã—ã¾ã™ã€‚voidã“ã®ã‚¿ã‚¹ã‚¯ã‚’強制的ã«å®Ÿè¡Œã—ã€ä¸æ–ã¾ãŸã¯å–り消ã—ã•れã¦ã„ãªã„å ´åˆã¯ã€joinãŠã‚ˆã³é–¢é€£ã®æ“作ã®å®Ÿè¡Œæ™‚ã«æŒ‡å®šã•れãŸä¾‹å¤–ãŒã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚待機ã›ãšã«ã‚¿ã‚¹ã‚¯ã«ã‚ˆã£ã¦ã‚¹ãƒãƒ¼ã•れãŸä¾‹å¤–ã‚’è¿”ã—ã¾ã™ã€‚protected abstract booleanexec()ã“ã®ã‚¿ã‚¹ã‚¯ã®ãƒ™ãƒ¼ã‚¹å‡¦ç†ã‚’ãŸã ã¡ã«å®Ÿè¡Œã—ã€trueã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‹ã‚‰æˆ»ã£ãŸå ´åˆã€ã“ã®ã‚¿ã‚¹ã‚¯ã¯å®Œäº†ã—ã¦ã„ã‚‹ã“ã¨ãŒä¿è¨¼ã•れã¾ã™ã€‚final ForkJoinTask<V> fork()ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れã¦ã„るプール内ã§ã“ã®ã‚¿ã‚¹ã‚¯ã‚’éžåŒæœŸã§å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã—ã¾ã™(該当ã™ã‚‹å ´åˆ)。inForkJoinPool()ã§ãªã„å ´åˆã¯ã€ForkJoinPool.commonPool()を使用ã—ã¾ã™ã€‚final Vget()å¿…è¦ã«å¿œã˜ã¦è¨ˆç®—ãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…機ã—ã€ãã®å¾Œã€è¨ˆç®—çµæžœã‚’å–å¾—ã—ã¾ã™ã€‚final Vå¿…è¦ã«å¿œã˜ã¦ã€æœ€å¤§ã§æŒ‡å®šã•ã‚ŒãŸæ™‚é–“ã€è¨ˆç®—ãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…機ã—ã€ãã®å¾Œã€è¨ˆç®—çµæžœãŒåˆ©ç”¨å¯èƒ½ãªå ´åˆã¯çµæžœã‚’å–å¾—ã—ã¾ã™ã€‚final Throwable基本計算ã«ã‚ˆã£ã¦ã‚¹ãƒãƒ¼ã•れãŸä¾‹å¤–ã‚’è¿”ã—ã¾ã™ã€‚å–り消ã•れãŸå ´åˆã¯CancellationExceptionã€ãªã„å ´åˆã¾ãŸã¯ãƒ¡ã‚½ãƒƒãƒ‰ãŒã¾ã 実行ã•れã¦ã„ãªã„å ´åˆã¯nullã‚’è¿”ã—ã¾ã™ã€‚final shortã“ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°ã‚’è¿”ã—ã¾ã™ã€‚static ForkJoinPoolgetPool()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’ホストã—ã¦ã„るプールを返ã—ã¾ã™ã€‚ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã®å¤–部ã§å®Ÿè¡Œã•れã¦ã„ã‚‹å ´åˆã¯ã€nullã‚’è¿”ã—ã¾ã™ã€‚static intç¾åœ¨ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ»ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ãƒ•ォークã•れãŸãŒã€ã¾ã 実行ã•れã¦ã„ãªã„ã‚¿ã‚¹ã‚¯ã®æŽ¨å®šæ•°ã‚’è¿”ã—ã¾ã™ã€‚abstract Vã“ã®ã‚¿ã‚¹ã‚¯ãŒç•°å¸¸ãªçŠ¶æ…‹ã§å®Ÿè¡Œã•れãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€join()ã«ã‚ˆã£ã¦è¿”ã•ã‚Œã‚‹çµæžœã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れãŸã‹ã©ã†ã‹ãŒä¸æ˜Žã®å ´åˆã¯ã€nullã§ã™ã€‚static intç¾åœ¨ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ»ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ä¿æŒã•れã¦ã„ã‚‹ãƒãƒ¼ã‚«ãƒ«ã®ã‚ューã«å…¥ã£ã¦ã„るタスクãŒã€ãれを横å–りã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ä»–ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ»ã‚¹ãƒ¬ãƒƒãƒ‰ã‚ˆã‚Šã‚‚ã©ã‚Œã ã‘多ã„ã‹ã®æŽ¨å®šå€¤ã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ã„ãªã„å ´åˆã¯ã‚¼ãƒã‚’è¿”ã—ã¾ã™ã€‚static voidç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã€Œé™æ¢ã€ã‚’ホストã™ã‚‹ãƒ—ールã¾ã§ã€ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚static booleanç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã€ForkJoinPool計算ã¨ã—ã¦å®Ÿè¡Œã•れるForkJoinWorkerThreadã®å ´åˆã€trueã‚’è¿”ã—ã¾ã™ã€‚final Vinvoke()ã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚’é–‹å§‹ã—ã€å¿…è¦ãªå ´åˆã¯å®Œäº†ã¾ã§å¾…機ã—ã€ãã®çµæžœã‚’è¿”ã™ã‹ã€åŸºæœ¬ã¨ãªã‚‹è¨ˆç®—ãŒãã†ã§ã‚ã‚‹å ´åˆã¯ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)RuntimeExceptionã¾ãŸã¯Errorをスãƒãƒ¼ã—ã¾ã™ã€‚static <T extends ForkJoinTask<?>>
Collection<T> invokeAll(Collection<T> tasks) 指定ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’フォークã—ã€å„タスクã«å¯¾ã—ã¦isDoneãŒé©ç”¨ã•れるã‹ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)例外ãŒç™ºç”Ÿã™ã‚‹å ´åˆã«å¾©å¸°ã—ã¾ã™ã€‚後者ã®å ´åˆã€ä¾‹å¤–ãŒå†ã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚static voidinvokeAll(ForkJoinTask<?>... tasks) 指定ã•れãŸã‚¿ã‚¹ã‚¯ã‚’フォークã—ã€å„タスクã«å¯¾ã—ã¦isDoneãŒé©ç”¨ã•れるã‹ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)例外ãŒç™ºç”Ÿã™ã‚‹å ´åˆã«å¾©å¸°ã—ã¾ã™ã€‚後者ã®å ´åˆã€ä¾‹å¤–ãŒå†ã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚static voidinvokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2) 指定ã•れãŸã‚¿ã‚¹ã‚¯ã‚’フォークã—ã€å„タスクã«å¯¾ã—ã¦isDoneãŒé©ç”¨ã•れるã‹ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)例外ãŒç™ºç”Ÿã™ã‚‹å ´åˆã«å¾©å¸°ã—ã¾ã™ã€‚後者ã®å ´åˆã€ä¾‹å¤–ãŒå†ã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚final booleanã“ã®ã‚¿ã‚¹ã‚¯ãŒæ£å¸¸ã«å®Œäº†ã™ã‚‹å‰ã«å–り消ã•れãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚final booleanã“ã®ã‚¿ã‚¹ã‚¯ãŒä¾‹å¤–をスãƒãƒ¼ã—ãŸã‹å–り消ã•れãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚final booleanã“ã®ã‚¿ã‚¹ã‚¯ãŒä¾‹å¤–をスãƒãƒ¼ã›ãšã«å®Œäº†ã—ã€å–り消ã•れãªã‹ã£ãŸå ´åˆã¯trueãŒè¿”ã•れã¾ã™ã€‚final booleanisDone()ã“ã®ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã—ãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚final Vjoin()「完了ã€ã®å ´åˆã®è¨ˆç®—çµæžœã‚’è¿”ã—ã¾ã™ã€‚protected static ForkJoinTask<?> ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ã‚ューã«å…¥ã‚Œã‚‰ã‚ŒãŸãŒã¾ã 実行ã•れã¦ã„ãªã„タスクãŒã™ãã«ä½¿ç”¨ã§ãã‚‹å ´åˆã€ãã®ã‚¿ã‚¹ã‚¯ã‚’è¿”ã—ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã‚„実行ã¯è¡Œã„ã¾ã›ã‚“。protected static ForkJoinTask<?> ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ã„ã‚‹å ´åˆã«ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ã‚ューã«å…¥ã‚Œã‚‰ã‚ŒãŸãŒã¾ã 実行ã•れã¦ã„ãªã„次ã®ã‚¿ã‚¹ã‚¯ã‚’ã€å®Ÿè¡Œã›ãšã«ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã—ã¦å¾©å¸°ã—ã¾ã™ã€‚protected static ForkJoinTask<?> ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ã„ã‚‹å ´åˆã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’解除ã—ã€å®Ÿè¡Œã›ãšã«ã€ãƒ—ールã«å¤–部ã«é€ä¿¡ã•れãŸã‚¿ã‚¹ã‚¯(使用å¯èƒ½ãªå ´åˆ)ã‚’è¿”ã—ã¾ã™ã€‚protected static ForkJoinTask<?> pollTask()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ãŠã‚Šã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ã‚ューã«å…¥ã‚Œã‚‰ã‚ŒãŸãŒã¾ã 実行ã•れã¦ã„ãªã„次ã®ã‚¿ã‚¹ã‚¯ãŒä½¿ç”¨å¯èƒ½ãªå ´åˆã€ãã®ã‚¿ã‚¹ã‚¯ã‚’実行ã›ãšã«ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã—ã¦å¾©å¸°ã—ã¾ã™ã€‚ãã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ãŒä½¿ç”¨å¯èƒ½ã§ãªã„å ´åˆã¯ã€ä»–ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ãƒ•ォークã•れãŸã‚¿ã‚¹ã‚¯ãŒå¯¾è±¡ã«ãªã‚Šã¾ã™(使用å¯èƒ½ãªå ´åˆ)。final void値をè¨å®šã›ãšã«ã“ã®ã‚¿ã‚¹ã‚¯ã‚’æ£å¸¸ã«å®Œäº†ã—ã¾ã™ã€‚final voidã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚’é–‹å§‹ã—ã€å¿…è¦ãªå ´åˆã¯å®Œäº†ã¾ã§å¾…機ã—ã¾ã™ãŒã€ãã®çµæžœã‚’è¿”ã—ãŸã‚Šä¾‹å¤–をスãƒãƒ¼ã—ãŸã‚Šã—ã¾ã›ã‚“。final voidã“ã®ã‚¿ã‚¹ã‚¯ã‚’çµåˆã—ã€ãã®çµæžœã‚’è¿”ã—ãŸã‚Šä¾‹å¤–をスãƒãƒ¼ã—ãŸã‚Šã—ã¾ã›ã‚“。final booleanquietlyJoin(long timeout, TimeUnit unit) ã“ã®ã‚¿ã‚¹ã‚¯ã¸ã®å‚åŠ ã‚’è©¦ã¿ã¾ã™ã€‚指定ã•れãŸã‚¿ã‚¤ãƒ アウトãŒçµŒéŽã—ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒä¸æ–ã•れã¦ã„ãªã„ã¨ãã«(例外的ã«)ãŒå®Œäº†ã—ãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚final booleanquietlyJoinUninterruptibly(long timeout, TimeUnit unit) ã“ã®ã‚¿ã‚¹ã‚¯ã¸ã®å‚åŠ ã‚’è©¦ã¿ã¾ã™ã€‚指定ã•れãŸã‚¿ã‚¤ãƒ アウトãŒçµŒéŽã™ã‚‹å‰ã«(例外的ã«)を完了ã—ãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚voidã“ã®ã‚¿ã‚¹ã‚¯ã®å†…部登録状態をリセットã—ã€å¾Œç¶šã®forkを許å¯ã—ã¾ã™ã€‚計算ã•れãŸçµæžœã‚’å¾…ãŸãšã«è¿”ã—ã¾ã™ã€‚final shortsetForkJoinTaskTag(short newValue) ã“ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°å€¤ã‚’原åçš„ã«è¨å®šã—ã€å¤ã„値を返ã—ã¾ã™ã€‚protected abstract voidsetRawResult(V value) 指定ã•れãŸå€¤ã‚’çµæžœã¨ã—ã¦è¿”ã™ã“ã¨ã‚’強制ã—ã¾ã™ã€‚state()計算状態を返ã—ã¾ã™ã€‚booleanã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã‚’試ã¿ã¾ã™ã€‚
-
コンストラクタã®è©³ç´°
-
ForkJoinTask
public ForkJoinTask()サブクラスãŒå‘¼ã³å‡ºã™ãŸã‚ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã€‚
-
-
メソッドã®è©³ç´°
-
fork
public final ForkJoinTask<V> fork()ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れã¦ã„るプール内ã§ã“ã®ã‚¿ã‚¹ã‚¯ã‚’éžåŒæœŸã§å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã—ã¾ã™(該当ã™ã‚‹å ´åˆ)。inForkJoinPool()ã§ãªã„å ´åˆã¯ã€ForkJoinPool.commonPool()を使用ã—ã¾ã™ã€‚ å¿…ãšã—ã‚‚é©ç”¨ã•れるã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ãŒã€ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã—ã¦å†åˆæœŸåŒ–ã•れãªã„ã‹ãŽã‚Šã€ã‚¿ã‚¹ã‚¯ã‚’複数回フォークã™ã‚‹ã“ã¨ã¯ä½¿ç”¨æ–¹æ³•ã®ã‚¨ãƒ©ãƒ¼ã§ã™ã€‚join()や関連ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã®å‘¼ã³å‡ºã—ã‚„ã€trueã‚’è¿”ã™isDone()ã®å‘¼ã³å‡ºã—ãŒå…ˆè¡Œã•れã¦ã„ãªã„é™ã‚Šã€ã“ã®ã‚¿ã‚¹ã‚¯ã®çŠ¶æ…‹ã‚„ãã‚ŒãŒæ“作ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã®å¾Œç¶šã®å¤‰æ›´ã¯ã€ãれを実行ã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ä»¥å¤–ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦å¿…ãšã—も常ã«è¦³æ¸¬ã•れるã¨ã¯é™ã‚Šã¾ã›ã‚“。- 戻り値:
thisã€ä½¿ç”¨æ–¹æ³•ã‚’å˜ç´”化ã™ã‚‹ãŸã‚
-
join
public final V join()「完了ã€ã®å ´åˆã®è¨ˆç®—çµæžœã‚’è¿”ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ç•°å¸¸ãªå®Œäº†ã«ã‚ˆã£ã¦ExecutionExceptionã§ã¯ãªãã€RuntimeExceptionã¾ãŸã¯ErrorãŒç™ºç”Ÿã™ã‚‹ç‚¹ã€ãŠã‚ˆã³å‘¼å‡ºã—å´ã‚¹ãƒ¬ãƒƒãƒ‰ã®å‰²ã‚Šè¾¼ã¿ã®ãŸã‚ã«ãƒ¡ã‚½ãƒƒãƒ‰ãŒInterruptedExceptionをスãƒãƒ¼ã—ã¦çªç„¶å¾©å¸°ã™ã‚‹ã“ã¨ãŒãªã„ã¨ã„ã†ç‚¹ã§ã€get()ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚- 戻り値:
- è¨ˆç®—çµæžœ
-
invoke
public final V invoke()ã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚’é–‹å§‹ã—ã€å¿…è¦ãªå ´åˆã¯å®Œäº†ã¾ã§å¾…機ã—ã€ãã®çµæžœã‚’è¿”ã™ã‹ã€åŸºæœ¬ã¨ãªã‚‹è¨ˆç®—ãŒãã†ã§ã‚ã‚‹å ´åˆã¯ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)RuntimeExceptionã¾ãŸã¯Errorをスãƒãƒ¼ã—ã¾ã™ã€‚- 戻り値:
- è¨ˆç®—çµæžœ
-
invokeAll
public static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2) 指定ã•れãŸã‚¿ã‚¹ã‚¯ã‚’フォークã—ã€å„タスクã«å¯¾ã—ã¦isDoneãŒé©ç”¨ã•れるã‹ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)例外ãŒç™ºç”Ÿã™ã‚‹å ´åˆã«å¾©å¸°ã—ã¾ã™ã€‚後者ã®å ´åˆã€ä¾‹å¤–ãŒå†ã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚ 複数ã®ã‚¿ã‚¹ã‚¯ã§ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å ´åˆã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã“れらã®ã„ãšã‚Œã‹ã®ä¾‹å¤–をスãƒãƒ¼ã—ã¾ã™ã€‚ ã„ãšã‚Œã‹ã®ã‚¿ã‚¹ã‚¯ã§ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€ã»ã‹ã®ã‚¿ã‚¹ã‚¯ãŒå–り消ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚ ãŸã ã—ã€å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ä¾‹å¤–ãŒè¿”ã•ã‚ŒãŸæ™‚点ã§ä¿è¨¼ã•れã¾ã›ã‚“。 å„タスクã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€ã‚¿ã‚¹ã‚¯ãŒå–り消ã•れãŸã‹ã€æ£å¸¸ã«å®Œäº†ã—ãŸã‹ã€ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸã‹ã€æœªå‡¦ç†ã®ã¾ã¾ã‹ã‚’確èªã™ã‚‹ãŸã‚ã®ã€getException()ãŠã‚ˆã³é–¢é€£ãƒ¡ã‚½ãƒƒãƒ‰ã«ã‚ˆã£ã¦å–å¾—ã§ãã¾ã™ã€‚- パラメータ:
t1- 最åˆã®ã‚¿ã‚¹ã‚¯t2- 2番目ã®ã‚¿ã‚¹ã‚¯- スãƒãƒ¼:
NullPointerException- ã„ãšã‚Œã‹ã®ã‚¿ã‚¹ã‚¯ãŒnullã®å ´åˆ
-
invokeAll
public static void invokeAll(ForkJoinTask<?>... tasks) 指定ã•れãŸã‚¿ã‚¹ã‚¯ã‚’フォークã—ã€å„タスクã«å¯¾ã—ã¦isDoneãŒé©ç”¨ã•れるã‹ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)例外ãŒç™ºç”Ÿã™ã‚‹å ´åˆã«å¾©å¸°ã—ã¾ã™ã€‚後者ã®å ´åˆã€ä¾‹å¤–ãŒå†ã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚ 複数ã®ã‚¿ã‚¹ã‚¯ã§ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å ´åˆã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã“れらã®ã„ãšã‚Œã‹ã®ä¾‹å¤–をスãƒãƒ¼ã—ã¾ã™ã€‚ ã„ãšã‚Œã‹ã®ã‚¿ã‚¹ã‚¯ã§ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸå ´åˆã€ã»ã‹ã®ã‚¿ã‚¹ã‚¯ãŒå–り消ã•ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ ãŸã ã—ã€å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ä¾‹å¤–ãŒè¿”ã•ã‚ŒãŸæ™‚点ã§ä¿è¨¼ã•れã¾ã›ã‚“。 å„タスクã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€ã‚¿ã‚¹ã‚¯ãŒå–り消ã•れãŸã‹ã€æ£å¸¸ã«å®Œäº†ã—ãŸã‹ã€ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸã‹ã€æœªå‡¦ç†ã®ã¾ã¾ã‹ã‚’確èªã™ã‚‹ãŸã‚ã®ã€getException()ãŠã‚ˆã³é–¢é€£ãƒ¡ã‚½ãƒƒãƒ‰ã«ã‚ˆã£ã¦å–å¾—ã§ãã¾ã™ã€‚- パラメータ:
tasks- タスク- スãƒãƒ¼:
NullPointerException- ã„ãšã‚Œã‹ã®ã‚¿ã‚¹ã‚¯ãŒnullã®å ´åˆ
-
invokeAll
public static <T extends ForkJoinTask<?>> Collection<T> invokeAll(Collection<T> tasks) 指定ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’フォークã—ã€å„タスクã«å¯¾ã—ã¦isDoneãŒé©ç”¨ã•れるã‹ã€(ãƒã‚§ãƒƒã‚¯ã•れãªã„)例外ãŒç™ºç”Ÿã™ã‚‹å ´åˆã«å¾©å¸°ã—ã¾ã™ã€‚後者ã®å ´åˆã€ä¾‹å¤–ãŒå†ã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚ 複数ã®ã‚¿ã‚¹ã‚¯ã§ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å ´åˆã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã“れらã®ã„ãšã‚Œã‹ã®ä¾‹å¤–をスãƒãƒ¼ã—ã¾ã™ã€‚ ã„ãšã‚Œã‹ã®ã‚¿ã‚¹ã‚¯ã§ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸå ´åˆã€ã»ã‹ã®ã‚¿ã‚¹ã‚¯ãŒå–り消ã•ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ ãŸã ã—ã€å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ä¾‹å¤–ãŒè¿”ã•ã‚ŒãŸæ™‚点ã§ä¿è¨¼ã•れã¾ã›ã‚“。 å„タスクã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€ã‚¿ã‚¹ã‚¯ãŒå–り消ã•れãŸã‹ã€æ£å¸¸ã«å®Œäº†ã—ãŸã‹ã€ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸã‹ã€æœªå‡¦ç†ã®ã¾ã¾ã‹ã‚’確èªã™ã‚‹ãŸã‚ã®ã€getException()ãŠã‚ˆã³é–¢é€£ãƒ¡ã‚½ãƒƒãƒ‰ã«ã‚ˆã£ã¦å–å¾—ã§ãã¾ã™ã€‚- 型パラメータ:
T- タスクã‹ã‚‰è¿”ã•れる値ã®ã‚¿ã‚¤ãƒ—- パラメータ:
tasks- タスクã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³- 戻り値:
- タスクã®å¼•æ•°ã€ä½¿ç”¨æ–¹æ³•ã‚’å˜ç´”化ã™ã‚‹ãŸã‚
- スãƒãƒ¼:
NullPointerException- タスクã¾ãŸã¯ã„ãšã‚Œã‹ã®è¦ç´ ãŒnullã®å ´åˆ
-
cancel
public boolean cancel(boolean mayInterruptIfRunning) ã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã®å–消ã—を試ã¿ã¾ã™ã€‚ タスクãŒã™ã§ã«å®Œäº†ã—ãŸã‹ã€ã¾ãŸã¯ãã®ä»–ã®ä½•らã‹ã®ç†ç”±ã§å–り消ã™ã“ã¨ãŒã§ããªã‹ã£ãŸå ´åˆã€ã“ã®è©¦ã¿ã¯å¤±æ•—ã—ã¾ã™ã€‚ ã“ã®è©¦ã¿ãŒæˆåŠŸã—ã€cancelãŒå‘¼ã³å‡ºã•れãŸã¨ãã«ã“ã®ã‚¿ã‚¹ã‚¯ãŒèµ·å‹•ã•れã¦ã„ãªã„å ´åˆã€ã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã¯æŠ‘制ã•れã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒæ£å¸¸ã«å¾©å¸°ã—ãŸã‚ã¨ã¯ã€reinitialize()ã¸ã®ä»‹å…¥ã™ã‚‹å‘¼å‡ºã—ãŒå˜åœ¨ã—ãªã„ã‹ãŽã‚Šã€isCancelled()ã€isDone()ã€ãŠã‚ˆã³cancelã®ä»¥é™ã®å‘¼å‡ºã—ã§ã¯trueãŒè¿”ã•れã€join()ãŠã‚ˆã³é–¢é€£ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã®å‘¼å‡ºã—ã§ã¯CancellationExceptionãŒç™ºç”Ÿã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚µãƒ–クラスã§ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ãŒã€ãã®å ´åˆã§ã‚‚ã€å¼•ãç¶šãã“れらã®ãƒ—ãƒãƒ‘ティãŒä¿æŒã•れるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ 特ã«ã€
cancelメソッド自体ãŒä¾‹å¤–をスãƒãƒ¼ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã»ã‹ã®ã‚¿ã‚¹ã‚¯ã‹ã‚‰å‘¼ã³å‡ºã•れるよã†ã«è¨è¨ˆã•れã¦ã„ã¾ã™ã€‚ ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã‚’終了ã™ã‚‹ã«ã¯ã€ãã®è¨ˆç®—メソッドã‹ã‚‰éžãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’è¿”ã™ã‹ã€ã¾ãŸã¯ã‚¹ãƒãƒ¼ã™ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯
completeExceptionally(Throwable)を呼ã³å‡ºã™ã®ã¿ã§æ¸ˆã¿ã¾ã™ã€‚ -
isDone
public final boolean isDone()次ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã‹ã‚‰ã‚³ãƒ”ーã•れãŸèª¬æ˜Ž:Futureã“ã®ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã—ãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚ 完了ã®ç†ç”±ã¯ã€æ£å¸¸çµ‚了ã€ä¾‹å¤–ã€å–り消ã—ãªã©ãŒã‚りã¾ã™ãŒã€ã„ãšã‚Œã®å ´åˆã‚‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯trueã‚’è¿”ã—ã¾ã™ã€‚ -
isCancelled
public final boolean isCancelled()次ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã‹ã‚‰ã‚³ãƒ”ーã•れãŸèª¬æ˜Ž:Futureã“ã®ã‚¿ã‚¹ã‚¯ãŒæ£å¸¸ã«å®Œäº†ã™ã‚‹å‰ã«å–り消ã•れãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚- 定義:
isCancelledã€ã‚¤ãƒ³ã‚¿ãƒ•ェースFuture<V>- 戻り値:
- ã“ã®ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã™ã‚‹å‰ã«å–り消ã•れãŸå ´åˆã¯
true
-
isCompletedAbnormally
public final boolean isCompletedAbnormally()ã“ã®ã‚¿ã‚¹ã‚¯ãŒä¾‹å¤–をスãƒãƒ¼ã—ãŸã‹å–り消ã•れãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚- 戻り値:
- ã“ã®ã‚¿ã‚¹ã‚¯ãŒä¾‹å¤–をスãƒãƒ¼ã—ãŸã‹ã€ã¾ãŸã¯å–り消ã•れãŸå ´åˆã¯
true
-
isCompletedNormally
public final boolean isCompletedNormally()ã“ã®ã‚¿ã‚¹ã‚¯ãŒä¾‹å¤–をスãƒãƒ¼ã›ãšã«å®Œäº†ã—ã€å–り消ã•れãªã‹ã£ãŸå ´åˆã¯trueãŒè¿”ã•れã¾ã™ã€‚- 戻り値:
- ã“ã®ã‚¿ã‚¹ã‚¯ãŒä¾‹å¤–をスãƒãƒ¼ã›ãšã«å®Œäº†ã—ã€å–り消ã•れãªã‹ã£ãŸå ´åˆã¯
true
-
state
public Future.State state()次ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã‹ã‚‰ã‚³ãƒ”ーã•れãŸèª¬æ˜Ž:Future計算状態を返ã—ã¾ã™ã€‚ -
resultNow
public V resultNow()次ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã‹ã‚‰ã‚³ãƒ”ーã•れãŸèª¬æ˜Ž:Future計算ã•れãŸçµæžœã‚’å¾…ãŸãšã«è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¿ã‚¹ã‚¯ãŒã™ã§ã«æ£å¸¸ã«å®Œäº†ã—ã¦ã„ã‚‹ã“ã¨ã‚’コール元ãŒèªè˜ã™ã‚‹å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€æˆåŠŸã—ãŸã‚¿ã‚¹ã‚¯ã«ã¤ã„ã¦Futureオブジェクトã®ã‚¹ãƒˆãƒªãƒ¼ãƒ をフィルタ処ç†ã—ã€ãƒžãƒƒãƒ”ング演算を使用ã—ã¦çµæžœã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’å–å¾—ã™ã‚‹å ´åˆãªã©ã§ã™ã€‚
results = futures.stream() .filter(f -> f.state() == Future.State.SUCCESS) .map(Future::resultNow) .toList(); -
exceptionNow
public Throwable exceptionNow()次ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã‹ã‚‰ã‚³ãƒ”ーã•れãŸèª¬æ˜Ž:Future待機ã›ãšã«ã‚¿ã‚¹ã‚¯ã«ã‚ˆã£ã¦ã‚¹ãƒãƒ¼ã•れãŸä¾‹å¤–ã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¿ã‚¹ã‚¯ãŒã™ã§ã«ä¾‹å¤–ã§å®Œäº†ã—ã¦ã„ã‚‹ã“ã¨ã‚’コール元ãŒèªè˜ã—ã¦ã„ã‚‹å ´åˆã«ç™ºç”Ÿã—ã¾ã™ã€‚
- 定義:
- インタフェース
Future<V>内ã®exceptionNow - 戻り値:
- タスクã«ã‚ˆã£ã¦ã‚¹ãƒãƒ¼ã•れãŸä¾‹å¤–
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 19
-
getException
public final Throwable getException()基本計算ã«ã‚ˆã£ã¦ã‚¹ãƒãƒ¼ã•れãŸä¾‹å¤–ã‚’è¿”ã—ã¾ã™ã€‚å–り消ã•れãŸå ´åˆã¯CancellationExceptionã€ãªã„å ´åˆã¾ãŸã¯ãƒ¡ã‚½ãƒƒãƒ‰ãŒã¾ã 実行ã•れã¦ã„ãªã„å ´åˆã¯nullã‚’è¿”ã—ã¾ã™ã€‚- 戻り値:
- 例外。ãªã„å ´åˆã¯
null
-
completeExceptionally
public void completeExceptionally(Throwable ex) ã“ã®ã‚¿ã‚¹ã‚¯ã‚’強制的ã«å®Ÿè¡Œã—ã€ä¸æ–ã¾ãŸã¯å–り消ã—ã•れã¦ã„ãªã„å ´åˆã¯ã€joinãŠã‚ˆã³é–¢é€£ã®æ“作ã®å®Ÿè¡Œæ™‚ã«æŒ‡å®šã•れãŸä¾‹å¤–ãŒã‚¹ãƒãƒ¼ã•れã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã™ã‚‹ã¨ã€éžåŒæœŸã‚¿ã‚¹ã‚¯ã§ä¾‹å¤–を引ãèµ·ã“ã—ãŸã‚Šã€ãã‚Œä»¥å¤–ã®æ–¹æ³•ã§ã¯å®Œäº†ã—ãªã„タスクã®å®Œäº†ã‚’強制ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“れをã»ã‹ã®çжæ³ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯æŽ¨å¥¨ã•れã¦ã„ã¾ã›ã‚“。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰å¯èƒ½ã§ã™ãŒã€ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ä¿è¨¼ã‚’ç¶æŒã™ã‚‹ãŸã‚ã«super実装を起動ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚- パラメータ:
ex- スãƒãƒ¼ã™ã‚‹ä¾‹å¤–。 ã“ã®ä¾‹å¤–ãŒRuntimeExceptionã¾ãŸã¯Errorã§ãªã„å ´åˆã€ã‚¹ãƒãƒ¼ã•れる実際ã®ä¾‹å¤–ã¯ã€åŽŸå›exã‚’å«ã‚€RuntimeExceptionã«ãªã‚Šã¾ã™ã€‚
-
complete
public void complete(V value) ã“ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ä¸æ–ã¾ãŸã¯å–り消ã—ã•れã¦ã„ãªã„å ´åˆã€joinã®å¾Œç¶šã®å‘¼ã³å‡ºã—ãŠã‚ˆã³é–¢é€£ã®æ“作ã®çµæžœã¨ã—ã¦æŒ‡å®šã•れãŸå€¤ã‚’è¿”ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã™ã‚‹ã¨ã€éžåŒæœŸã‚¿ã‚¹ã‚¯ã«çµæžœã‚’æä¾›ã—ãŸã‚Šã€ãã‚Œä»¥å¤–ã®æ–¹æ³•ã§ã¯æ£å¸¸ã«å®Œäº†ã—ãªã„タスクã«ä»£ã‚りã®å‡¦ç†æ–¹æ³•ã‚’æä¾›ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“れをã»ã‹ã®çжæ³ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯æŽ¨å¥¨ã•れã¦ã„ã¾ã›ã‚“。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰å¯èƒ½ã§ã™ãŒã€ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ä¿è¨¼ã‚’ç¶æŒã™ã‚‹ãŸã‚ã«super実装を起動ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚- パラメータ:
value- ã“ã®ã‚¿ã‚¹ã‚¯ã®çµæžœå€¤
-
quietlyComplete
public final void quietlyComplete()値をè¨å®šã›ãšã«ã“ã®ã‚¿ã‚¹ã‚¯ã‚’æ£å¸¸ã«å®Œäº†ã—ã¾ã™ã€‚setRawResult(V)ã«ã‚ˆã£ã¦è¨å®šã•ã‚ŒãŸæœ€æ–°ã®å€¤(ã¾ãŸã¯ãƒ‡ãƒ•ォルトã®null)ã¯ã€joinã®å¾Œç¶šã®å‘¼å‡ºã—ãŠã‚ˆã³é–¢é€£ã®æ“作ã®çµæžœã¨ã—ã¦è¿”ã•れã¾ã™ã€‚- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 1.8
-
get
public final V get() throws InterruptedException, ExecutionExceptionå¿…è¦ã«å¿œã˜ã¦è¨ˆç®—ãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…機ã—ã€ãã®å¾Œã€è¨ˆç®—çµæžœã‚’å–å¾—ã—ã¾ã™ã€‚- 定義:
getã€ã‚¤ãƒ³ã‚¿ãƒ•ェースFuture<V>- 戻り値:
- è¨ˆç®—çµæžœ
- スãƒãƒ¼:
CancellationException- 計算ãŒå–り消ã•れãŸå ´åˆExecutionException- 計算ã§ä¾‹å¤–ãŒã‚¹ãƒãƒ¼ã•れãŸå ´åˆInterruptedException- ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã®ãƒ¡ãƒ³ãƒãƒ¼ã§ãªãã€å¾…機ä¸ã«å‰²è¾¼ã¿ãŒç™ºç”Ÿã—ãŸå ´åˆ
-
get
public final V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException å¿…è¦ã«å¿œã˜ã¦ã€æœ€å¤§ã§æŒ‡å®šã•ã‚ŒãŸæ™‚é–“ã€è¨ˆç®—ãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…機ã—ã€ãã®å¾Œã€è¨ˆç®—çµæžœãŒåˆ©ç”¨å¯èƒ½ãªå ´åˆã¯çµæžœã‚’å–å¾—ã—ã¾ã™ã€‚- 定義:
getã€ã‚¤ãƒ³ã‚¿ãƒ•ェースFuture<V>- パラメータ:
timeout- 待機ã™ã‚‹æœ€é•·æ™‚é–“unit- timeoutå¼•æ•°ã®æ™‚é–“å˜ä½- 戻り値:
- è¨ˆç®—çµæžœ
- スãƒãƒ¼:
CancellationException- 計算ãŒå–り消ã•れãŸå ´åˆExecutionException- 計算ã§ä¾‹å¤–ãŒã‚¹ãƒãƒ¼ã•れãŸå ´åˆInterruptedException- ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã®ãƒ¡ãƒ³ãƒãƒ¼ã§ãªãã€å¾…機ä¸ã«å‰²è¾¼ã¿ãŒç™ºç”Ÿã—ãŸå ´åˆTimeoutException- 待機ãŒã‚¿ã‚¤ãƒ ・アウトã«ãªã£ãŸå ´åˆ
-
quietlyJoin
public final void quietlyJoin()ã“ã®ã‚¿ã‚¹ã‚¯ã‚’çµåˆã—ã€ãã®çµæžœã‚’è¿”ã—ãŸã‚Šä¾‹å¤–をスãƒãƒ¼ã—ãŸã‚Šã—ã¾ã›ã‚“。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ä¸€éƒ¨ã®ã‚¿ã‚¹ã‚¯ãŒå–り消ã•れãŸã‹ã€ã¾ãŸã¯ãれ以外ã§å¼·åˆ¶çš„ã«ä¸æ¢ã•れãŸã“ã¨ãŒã‚ã‹ã£ã¦ã„る状態ã§ã€ã‚¿ã‚¹ã‚¯ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’処ç†ã™ã‚‹ã¨ãã«å½¹ç«‹ã¤ã“ã¨ãŒã‚りã¾ã™ã€‚ -
quietlyInvoke
public final void quietlyInvoke()ã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚’é–‹å§‹ã—ã€å¿…è¦ãªå ´åˆã¯å®Œäº†ã¾ã§å¾…機ã—ã¾ã™ãŒã€ãã®çµæžœã‚’è¿”ã—ãŸã‚Šä¾‹å¤–をスãƒãƒ¼ã—ãŸã‚Šã—ã¾ã›ã‚“。 -
quietlyJoin
public final boolean quietlyJoin(long timeout, TimeUnit unit) throws InterruptedException ã“ã®ã‚¿ã‚¹ã‚¯ã¸ã®å‚åŠ ã‚’è©¦ã¿ã¾ã™ã€‚指定ã•れãŸã‚¿ã‚¤ãƒ アウトãŒçµŒéŽã—ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒä¸æ–ã•れã¦ã„ãªã„ã¨ãã«(例外的ã«)ãŒå®Œäº†ã—ãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚- パラメータ:
timeout- 待機ã™ã‚‹æœ€é•·æ™‚é–“unit- timeoutå¼•æ•°ã®æ™‚é–“å˜ä½- 戻り値:
- ã“ã®ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã—ãŸå ´åˆã¯true
- スãƒãƒ¼:
InterruptedException- 待機ä¸ã«ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§å‰²è¾¼ã¿ãŒç™ºç”Ÿã—ãŸå ´åˆ- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 19
-
quietlyJoinUninterruptibly
public final boolean quietlyJoinUninterruptibly(long timeout, TimeUnit unit) ã“ã®ã‚¿ã‚¹ã‚¯ã¸ã®å‚åŠ ã‚’è©¦ã¿ã¾ã™ã€‚指定ã•れãŸã‚¿ã‚¤ãƒ アウトãŒçµŒéŽã™ã‚‹å‰ã«(例外的ã«)を完了ã—ãŸå ´åˆã¯trueã‚’è¿”ã—ã¾ã™ã€‚- パラメータ:
timeout- 待機ã™ã‚‹æœ€é•·æ™‚é–“unit- timeoutå¼•æ•°ã®æ™‚é–“å˜ä½- 戻り値:
- ã“ã®ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã—ãŸå ´åˆã¯true
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 19
-
helpQuiesce
public static void helpQuiesce()ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã€Œé™æ¢ã€ã‚’ホストã™ã‚‹ãƒ—ールã¾ã§ã€ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€å¤šæ•°ã®ã‚¿ã‚¹ã‚¯ãŒãƒ•ォークã•れるãŒã€ã©ã®ã‚¿ã‚¹ã‚¯ã‚‚明示的ã«ã¯çµåˆã•れãšã€ä»£ã‚りã«ã™ã¹ã¦ãŒå‡¦ç†ã•れるã¾ã§å®Ÿè¡Œã™ã‚‹è¨è¨ˆã§å½¹ç«‹ã¤ã“ã¨ãŒã‚りã¾ã™ã€‚ -
reinitialize
public void reinitialize()ã“ã®ã‚¿ã‚¹ã‚¯ã®å†…部登録状態をリセットã—ã€å¾Œç¶šã®forkを許å¯ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã™ã‚‹ã¨ã€ã“ã®ã‚¿ã‚¹ã‚¯ã‚’ç¹°è¿”ã—å†åˆ©ç”¨ã§ãã¾ã™ãŒã€ãれãŒå¯èƒ½ãªã®ã¯ã€ã“ã®ã‚¿ã‚¹ã‚¯ãŒãƒ•ォークã•れã¦ã„ãªã„ã‹ã€ã¾ãŸã¯ãƒ•ォークã•れãŸã‚ã¨ã«å®Œäº†ã—ã€ã‹ã¤ã“ã®ã‚¿ã‚¹ã‚¯ã®æœªå‡¦ç†ã®çµåˆã‚‚ã™ã¹ã¦å®Œäº†ã—ã¦ã„ã‚‹ã¨ãã«å†åˆ©ç”¨ãŒç™ºç”Ÿã—ãŸå ´åˆã ã‘ã§ã™ã€‚ ãã®ä»–ã®ã™ã¹ã¦ã®ä½¿ç”¨æ¡ä»¶ã®ä¸‹ã§ã®åŠ¹æžœã¯ä¿è¨¼ã•れã¾ã›ã‚“。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ãƒ«ãƒ¼ãƒ—内ã§ã‚µãƒ–タスクã®äº‹å‰ã«æ§‹ç¯‰ã•れãŸãƒ„リーを実行ã™ã‚‹ã¨ãã«å½¹ç«‹ã¤ã“ã¨ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå®Œäº†ã™ã‚‹ã¨ã€
isDone()ã¯falseã‚’å ±å‘Šã—ã€getException()ã¯nullã‚’å ±å‘Šã—ã¾ã™ã€‚ ãŸã ã—ã€getRawResultã«ã‚ˆã£ã¦è¿”ã•れる値ã¯å½±éŸ¿ã‚’å—ã‘ã¾ã›ã‚“。 ã“ã®å€¤ã‚’クリアã™ã‚‹ã«ã¯ã€setRawResult(null)を呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚ -
getPool
public static ForkJoinPool getPool()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’ホストã—ã¦ã„るプールを返ã—ã¾ã™ã€‚ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã®å¤–部ã§å®Ÿè¡Œã•れã¦ã„ã‚‹å ´åˆã¯ã€nullã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€
nullã‚’è¿”ã—ã¾ã™ã€‚inForkJoinPool()ãŒfalseã‚’è¿”ã™å ´åˆã«ã®ã¿nullã‚’è¿”ã—ã¾ã™ã€‚- 戻り値:
- プール。ãªã„å ´åˆã¯
null
-
inForkJoinPool
public static boolean inForkJoinPool()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã€ForkJoinPool計算ã¨ã—ã¦å®Ÿè¡Œã•れるForkJoinWorkerThreadã®å ´åˆã€trueã‚’è¿”ã—ã¾ã™ã€‚- 戻り値:
- ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPool計算ã¨ã—ã¦å®Ÿè¡Œã•れる
ForkJoinWorkerThreadã§ã‚ã‚‹å ´åˆã¯true。ãれ以外ã®å ´åˆã¯false
-
tryUnfork
public boolean tryUnfork()ã“ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã‚’試ã¿ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯é€šå¸¸ã€ã“ã®ã‚¿ã‚¹ã‚¯ãŒç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦æœ€å¾Œã«ãƒ•ォークã•れãŸã‚¿ã‚¹ã‚¯ã§ã‚りã€ã‹ã¤åˆ¥ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã®å®Ÿè¡Œã‚’é–‹å§‹ã—ã¦ã„ãªã„å ´åˆã«æˆåŠŸã—ã¾ã™(ãŸã ã—ã€ä¿è¨¼ã¯ã•れã¾ã›ã‚“)。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€æ¨ªå–りã•れãŸå¯èƒ½æ€§ãŒã‚ã‚‹ãŒã€æ¨ªå–りã•れã¦ã„ãªã‹ã£ãŸã‚¿ã‚¹ã‚¯ã®ä»£ã‚りã®ãƒãƒ¼ã‚«ãƒ«å‡¦ç†ã‚’調整ã™ã‚‹ã¨ãã«å½¹ç«‹ã¤ã“ã¨ãŒã‚りã¾ã™ã€‚- 戻り値:
- フォーク解除ã•れãŸå ´åˆã¯
true
-
getQueuedTaskCount
public static int getQueuedTaskCount()ç¾åœ¨ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ»ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ãƒ•ォークã•れãŸãŒã€ã¾ã 実行ã•れã¦ã„ãªã„ã‚¿ã‚¹ã‚¯ã®æŽ¨å®šæ•°ã‚’è¿”ã—ã¾ã™ã€‚ ã“ã®å€¤ã¯ã€ã»ã‹ã®ã‚¿ã‚¹ã‚¯ã‚’フォークã™ã‚‹ã‹ã©ã†ã‹ã«é–¢ã™ã‚‹ãƒ’ãƒ¥ãƒ¼ãƒªã‚¹ãƒ†ã‚£ãƒƒã‚¯ãªæ±ºå®šã‚’下ã™ãŸã‚ã«å½¹ç«‹ã¤å ´åˆãŒã‚りã¾ã™ã€‚- 戻り値:
- タスク数
-
getSurplusQueuedTaskCount
public static int getSurplusQueuedTaskCount()ç¾åœ¨ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ»ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ä¿æŒã•れã¦ã„ã‚‹ãƒãƒ¼ã‚«ãƒ«ã®ã‚ューã«å…¥ã£ã¦ã„るタスクãŒã€ãれを横å–りã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ä»–ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ»ã‚¹ãƒ¬ãƒƒãƒ‰ã‚ˆã‚Šã‚‚ã©ã‚Œã ã‘多ã„ã‹ã®æŽ¨å®šå€¤ã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ã„ãªã„å ´åˆã¯ã‚¼ãƒã‚’è¿”ã—ã¾ã™ã€‚ ã“ã®å€¤ã¯ã€ã»ã‹ã®ã‚¿ã‚¹ã‚¯ã‚’フォークã™ã‚‹ã‹ã©ã†ã‹ã«é–¢ã™ã‚‹ãƒ’ãƒ¥ãƒ¼ãƒªã‚¹ãƒ†ã‚£ãƒƒã‚¯ãªæ±ºå®šã‚’下ã™ãŸã‚ã«å½¹ç«‹ã¤å ´åˆãŒã‚りã¾ã™ã€‚ ForkJoinTaskã®å¤šãã®ä½¿ç”¨æ–¹æ³•ã«ãŠã‘る定常状態ã§ã€å„ワーカーã¯ã€ã‚¿ã‚¹ã‚¯ã®å°ã•ã„余りã®å®šæ•°(ãŸã¨ãˆã°ã€3)ã‚’ç¶æŒã—ã€ã“ã®ã—ãã„値を超ãˆãŸå ´åˆã¯è¨ˆç®—ã‚’ãƒãƒ¼ã‚«ãƒ«ã§å‡¦ç†ã—よã†ã¨ã™ã‚‹ã¹ãã§ã™ã€‚- 戻り値:
- タスクã®ä½™ã‚Šã®æ•°ã€‚è² ã®å ´åˆã‚‚ã‚ã‚‹
-
getRawResult
public abstract V getRawResult()ã“ã®ã‚¿ã‚¹ã‚¯ãŒç•°å¸¸ãªçŠ¶æ…‹ã§å®Ÿè¡Œã•れãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€join()ã«ã‚ˆã£ã¦è¿”ã•ã‚Œã‚‹çµæžœã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れãŸã‹ã©ã†ã‹ãŒä¸æ˜Žã®å ´åˆã¯ã€nullã§ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ãƒ‡ãƒãƒƒã‚°ã‚’支æ´ã—ãŸã‚Šã€æ‹¡å¼µæ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚ ã“れをã»ã‹ã®ã‚³ãƒ³ãƒ†ã‚ストã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯æŽ¨å¥¨ã•れã¦ã„ã¾ã›ã‚“。- 戻り値:
- çµæžœã‚ã‚‹ã„ã¯
null(完了ã—ãªã„å ´åˆ)
-
setRawResult
protected abstract void setRawResult(V value) 指定ã•れãŸå€¤ã‚’çµæžœã¨ã—ã¦è¿”ã™ã“ã¨ã‚’強制ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯æ‹¡å¼µæ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã‚ã‚‹ãŸã‚ã€ãれ以外ã®ä¸€èˆ¬çš„ãªå ´åˆã§ã¯å‘¼ã³å‡ºã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。- パラメータ:
value- 値
-
exec
protected abstract boolean exec()ã“ã®ã‚¿ã‚¹ã‚¯ã®ãƒ™ãƒ¼ã‚¹å‡¦ç†ã‚’ãŸã ã¡ã«å®Ÿè¡Œã—ã€trueã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‹ã‚‰æˆ»ã£ãŸå ´åˆã€ã“ã®ã‚¿ã‚¹ã‚¯ã¯å®Œäº†ã—ã¦ã„ã‚‹ã“ã¨ãŒä¿è¨¼ã•れã¾ã™ã€‚ ãれ以外ã®å ´åˆã€ãŸã¨ãˆã°å®Œäº†ãƒ¡ã‚½ãƒƒãƒ‰ã®æ˜Žç¤ºçš„ãªå‘¼å‡ºã—ã‚’å¿…è¦ã¨ã™ã‚‹éžåŒæœŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã“ã®ã‚¿ã‚¹ã‚¯ãŒå¿…ãšã—も完了ã—ã¦ã„ãªã„(ã¾ãŸã¯å®Œäº†ã—ã¦ã„ã‚‹ã“ã¨ãŒã‚ã‹ã£ã¦ã„ãªã„)ã“ã¨ã‚’示ã™falseã‚’è¿”ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ç•°å¸¸çµ‚了を示ã™(éžãƒã‚§ãƒƒã‚¯)例外をスãƒãƒ¼ã™ã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯æ‹¡å¼µæ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã‚ã‚‹ãŸã‚ã€ãれ以外ã®ä¸€èˆ¬çš„ãªå ´åˆã§ã¯å‘¼ã³å‡ºã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。- 戻り値:
- ã“ã®ã‚¿ã‚¹ã‚¯ãŒæ£å¸¸ã«å®Œäº†ã—ãŸã“ã¨ãŒã‚ã‹ã£ã¦ã„ã‚‹å ´åˆã¯
true
-
peekNextLocalTask
protected static ForkJoinTask<?> peekNextLocalTask()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ã‚ューã«å…¥ã‚Œã‚‰ã‚ŒãŸãŒã¾ã 実行ã•れã¦ã„ãªã„タスクãŒã™ãã«ä½¿ç”¨ã§ãã‚‹å ´åˆã€ãã®ã‚¿ã‚¹ã‚¯ã‚’è¿”ã—ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã‚„実行ã¯è¡Œã„ã¾ã›ã‚“。 ã“ã®ã‚¿ã‚¹ã‚¯ãŒæ¬¡ã«å®Ÿéš›ã«ãƒãƒ¼ãƒªãƒ³ã‚°ã¾ãŸã¯å®Ÿè¡Œã•れるã¨ã„ã†ä¿è¨¼ã¯ã‚りã¾ã›ã‚“。 逆ã«ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¿ã‚¹ã‚¯ãŒå˜åœ¨ã™ã‚‹ãŒã€ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¨ç«¶åˆã—ãªã‘れã°ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã§ã‚‚nullã‚’è¿”ã™ã“ã¨ãŒã‚りã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ä¸»ã«æ‹¡å¼µæ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã€ã»ã‹ã®ç”¨é€”ã§ä½¿ç”¨ã•れるã“ã¨ã¯ã¾ã‚Œã§ã™ã€‚- 戻り値:
- 次ã®ã‚¿ã‚¹ã‚¯ã€‚使用ã§ãã‚‹ã‚‚ã®ãŒãªã„å ´åˆã¯
null
-
pollNextLocalTask
protected static ForkJoinTask<?> pollNextLocalTask()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ã„ã‚‹å ´åˆã«ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ã‚ューã«å…¥ã‚Œã‚‰ã‚ŒãŸãŒã¾ã 実行ã•れã¦ã„ãªã„次ã®ã‚¿ã‚¹ã‚¯ã‚’ã€å®Ÿè¡Œã›ãšã«ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã—ã¦å¾©å¸°ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ä¸»ã«æ‹¡å¼µæ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã€ã»ã‹ã®ç”¨é€”ã§ä½¿ç”¨ã•れるã“ã¨ã¯ã¾ã‚Œã§ã™ã€‚- 戻り値:
- 次ã®ã‚¿ã‚¹ã‚¯ã€‚使用ã§ãã‚‹ã‚‚ã®ãŒãªã„å ´åˆã¯
null
-
pollTask
protected static ForkJoinTask<?> pollTask()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ãŠã‚Šã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ã‚ューã«å…¥ã‚Œã‚‰ã‚ŒãŸãŒã¾ã 実行ã•れã¦ã„ãªã„次ã®ã‚¿ã‚¹ã‚¯ãŒä½¿ç”¨å¯èƒ½ãªå ´åˆã€ãã®ã‚¿ã‚¹ã‚¯ã‚’実行ã›ãšã«ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è§£é™¤ã—ã¦å¾©å¸°ã—ã¾ã™ã€‚ãã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ãŒä½¿ç”¨å¯èƒ½ã§ãªã„å ´åˆã¯ã€ä»–ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ã‚ˆã£ã¦ãƒ•ォークã•れãŸã‚¿ã‚¹ã‚¯ãŒå¯¾è±¡ã«ãªã‚Šã¾ã™(使用å¯èƒ½ãªå ´åˆ)。 å¯ç”¨æ€§ã¯ä¸€æ™‚çš„ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€nullã®çµæžœã¯ã€å¿…ãšã—ã‚‚ã“ã®ã‚¿ã‚¹ã‚¯ãŒå‹•作ã—ã¦ã„るプールã®ä¼‘æ¢ã‚’示ã™ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ä¸»ã«æ‹¡å¼µæ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã€ã»ã‹ã®ç”¨é€”ã§ä½¿ç”¨ã•れるã“ã¨ã¯ã¾ã‚Œã§ã™ã€‚- 戻り値:
- タスク。使用ã§ãã‚‹ã‚‚ã®ãŒãªã„å ´åˆã¯
null
-
pollSubmission
protected static ForkJoinTask<?> pollSubmission()ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒForkJoinPoolã§å‹•作ã—ã¦ã„ã‚‹å ´åˆã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’解除ã—ã€å®Ÿè¡Œã›ãšã«ã€ãƒ—ールã«å¤–部ã«é€ä¿¡ã•れãŸã‚¿ã‚¹ã‚¯(使用å¯èƒ½ãªå ´åˆ)ã‚’è¿”ã—ã¾ã™ã€‚ å¯ç”¨æ€§ã¯ä¸€æ™‚çš„ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€nullã®çµæžœã¯å¿…ãšã—もプールã®é™æ¢ã‚’æ„味ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。 ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ä¸»ã«æ‹¡å¼µæ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã€ã»ã‹ã®ç”¨é€”ã§ä½¿ç”¨ã•れるã“ã¨ã¯ã¾ã‚Œã§ã™ã€‚- 戻り値:
- タスク。使用ã§ãã‚‹ã‚‚ã®ãŒãªã„å ´åˆã¯
null - å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 9
-
getForkJoinTaskTag
public final short getForkJoinTaskTag()ã“ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°ã‚’è¿”ã—ã¾ã™ã€‚- 戻り値:
- ã“ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 1.8
-
setForkJoinTaskTag
public final short setForkJoinTaskTag(short newValue) ã“ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°å€¤ã‚’原åçš„ã«è¨å®šã—ã€å¤ã„値を返ã—ã¾ã™ã€‚- パラメータ:
newValue- æ–°ã—ã„タグ値- 戻り値:
- å‰ã®ã‚¿ã‚°å€¤
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 1.8
-
compareAndSetForkJoinTaskTag
public final boolean compareAndSetForkJoinTaskTag(short expect, short update) ã“ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°å€¤ã‚’原åçš„ã«æ¡ä»¶ä»˜ãã§è¨å®šã—ã¾ã™ã€‚ ã‚¿ã‚°ã¯ã€æ§˜ã€…ãªã‚¢ãƒ—リケーションã®ä¸ã§ã‚‚特ã«ã€ã‚°ãƒ©ãƒ•ã‚’æ“作ã™ã‚‹ã‚¿ã‚¹ã‚¯ã§ã®ãƒã‚§ãƒƒã‚¯ãƒ»ãƒžãƒ¼ã‚«ãƒ¼ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€å‡¦ç†å‰ã«if (task.compareAndSetForkJoinTaskTag((short)0, (short)1))を確èªã—ã€falseã®å ´åˆã¯ãƒŽãƒ¼ãƒ‰ãŒã™ã§ã«ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ã‚‹ã®ã§çµ‚了ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ãªã©ã§ã™ã€‚- パラメータ:
expect- 予想ã•れるタグ値update- æ–°ã—ã„タグ値- 戻り値:
- æˆåŠŸã—ãŸå ´åˆã¯
true。ã¤ã¾ã‚Šã€ç¾åœ¨ã®å€¤ãŒexpectã«ç‰ã—ãã€updateã«å¤‰æ›´ã•れã¾ã—ãŸã€‚ - å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 1.8
-
adapt
public static ForkJoinTask<?> adapt(Runnable runnable) 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()実行時ã«nullã®çµæžœã‚’è¿”ã—ã¾ã™ã€‚- パラメータ:
runnable- 実行å¯èƒ½ã‚¢ã‚¯ã‚·ãƒ§ãƒ³- 戻り値:
- タスク
-
adapt
public static <T> ForkJoinTask<T> adapt(Runnable runnable, T result) 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()å®Ÿè¡Œæ™‚ã«æŒ‡å®šã•れãŸçµæžœã‚’è¿”ã—ã¾ã™ã€‚- 型パラメータ:
T- çµæžœã®ã‚¿ã‚¤ãƒ—- パラメータ:
runnable- 実行å¯èƒ½ã‚¢ã‚¯ã‚·ãƒ§ãƒ³result- 完了時ã®çµæžœ- 戻り値:
- タスク
-
adapt
public static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable) 指定ã•れãŸCallableã®callメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€ãã®çµæžœã‚’join()実行時ã«è¿”ã—ã€ç™ºç”Ÿã—ãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚- 型パラメータ:
T- コールå¯èƒ½çµæžœã®ã‚¿ã‚¤ãƒ—- パラメータ:
callable- 呼出ã—å¯èƒ½ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³- 戻り値:
- タスク
-
adaptInterruptible
public static <T> ForkJoinTask<T> adaptInterruptible(Callable<? extends T> callable) 指定ã•れãŸCallableã®callメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€ãã®çµæžœã‚’join()実行時ã«è¿”ã—ã€ç™ºç”Ÿã—ãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚ ã¾ãŸã€mayInterruptIfRunning trueを指定ã—ã¦cancelã‚’èµ·å‹•ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ãŒä¸æ–ã•れã¾ã™ã€‚- 型パラメータ:
T- コールå¯èƒ½çµæžœã®ã‚¿ã‚¤ãƒ—- パラメータ:
callable- 呼出ã—å¯èƒ½ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³- 戻り値:
- タスク
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 19
-
adaptInterruptible
public static <T> ForkJoinTask<T> adaptInterruptible(Runnable runnable, T result) 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()ã§æŒ‡å®šã—ãŸçµæžœã‚’è¿”ã—ã€æ¤œå‡ºã•れãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚ ã¾ãŸã€mayInterruptIfRunning trueを指定ã—ã¦cancelã‚’èµ·å‹•ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ãŒä¸æ–ã•れã¾ã™ã€‚- 型パラメータ:
T- çµæžœã®ã‚¿ã‚¤ãƒ—- パラメータ:
runnable- 実行å¯èƒ½ã‚¢ã‚¯ã‚·ãƒ§ãƒ³result- 完了時ã®çµæžœ- 戻り値:
- タスク
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 22
-
adaptInterruptible
public static ForkJoinTask<?> adaptInterruptible(Runnable runnable) 指定ã•れãŸRunnableã®runメソッドをアクションã¨ã—ã¦å®Ÿè¡Œã™ã‚‹æ–°ã—ã„ForkJoinTaskã‚’è¿”ã—ã€join()ã§nullã‚’è¿”ã—ã€æ¤œå‡ºã•れãŸãƒã‚§ãƒƒã‚¯ä¾‹å¤–ã‚’RuntimeExceptionã«å¤‰æ›ã—ã¾ã™ã€‚ ã¾ãŸã€mayInterruptIfRunning trueを指定ã—ã¦cancelã‚’èµ·å‹•ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ãŒä¸æ–ã•れã¾ã™ã€‚- パラメータ:
runnable- 実行å¯èƒ½ã‚¢ã‚¯ã‚·ãƒ§ãƒ³- 戻り値:
- タスク
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 22
-