<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 線程池入門到精通 ## 什么是線程池 * 復用創建好的線程,節約創建和銷毀的時間。 * 需要使用線程時,就從池子里拿一個空閑的線程,完成工作后,歸還線程給線程池。 ## 線程池工作原理 ![](https://img.kancloud.cn/ca/63/ca63d4ed125abe5e16408822cc359c82_1576x1498.png) ## 線程池工作流程 ![](https://img.kancloud.cn/2f/b9/2fb9bccd4a105343413fd5d9de66744d_1358x1226.png) ## 線程池生命周期及擴展點 ![](https://img.kancloud.cn/42/85/42857a031ae9ba403492fdce48d56073_454x1312.png) ## 線程池參數 ![](https://img.kancloud.cn/2f/de/2fde29f17f5e5145a0d45191ff52817a_1610x1100.png) ## JDK提供的線程池 ![](https://img.kancloud.cn/9a/80/9a80163ec83ebcd3107193f670cc0474_1612x1112.png) ## 線程池常見阻塞隊列 ![](https://img.kancloud.cn/6c/b0/6cb0bb59ef589dd80a25021eb9b2a8ea_1212x828.png) ## 線程池內置拒絕策略 ![](https://img.kancloud.cn/42/d9/42d9feb65d859e84c316c2e5daf3841f_884x698.png) ## 線程池核心線程數設置 ![](https://img.kancloud.cn/f8/17/f817f94112a2e027ec33f658cff9fb43_1532x694.png) ## Fork/Join框架 ### 執行邏輯 ![](https://img.kancloud.cn/69/1f/691f88d48cbfccf55b2eef1f80579770_1668x804.png) ### 竊取原理 ![](https://img.kancloud.cn/4e/f7/4ef79ee39d07362349edad71e6791ecf_500x796.png) ### 任務類圖 ![](https://img.kancloud.cn/71/59/715983070eb632c6327f2000c0fefb30_986x560.png) ### 例子 求開始數到結束數的和。 ~~~ package org.mango.demo.mt.thread; import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; /** * 遞歸任務,帶返回值的 * @Author: mango * @Date: 2022/6/27 10:18 下午 */ public class SumTask extends RecursiveTask<Long> implements Callable<Long> { // 臨界值 private static final int THRESHOLD = 10000; private long start; private long end; public SumTask(long start,long end){ this.start = start; this.end = end; } @Override protected Long compute() { long sum = 0L; boolean canSum = (end-start) < THRESHOLD; if(canSum){ for(long i=start;i<=end;i++){ sum += i; } }else{ // 分成100個小任務 int count = 100; long step = (end-start)/count; List<SumTask> sumTasks = new ArrayList<>(); // 游標 long cursor = start; for(int i=0;i<count;i++){ long theEnd = cursor + step; if(theEnd > end){ theEnd = end; } SumTask sumTask = new SumTask(cursor,theEnd); // 游標下移動 cursor += step + 1; // 將任務加入集合,并開啟子任務 sumTasks.add(sumTask); sumTask.fork(); } // 合并子任務結果 for (SumTask sumTask : sumTasks){ sum += sumTask.join(); } } return sum; } public static void main(String[] args) throws ExecutionException, InterruptedException { ForkJoinPool forkJoinPool = new ForkJoinPool(); SumTask sumTask = new SumTask(1,123456789L); Long result = forkJoinPool.invoke(sumTask); System.out.println("結果為:"+result); // ForkJoinTask<Long> forkJoinTask = forkJoinPool.submit(sumTask); // try { // Long result2 = forkJoinTask.get(); // } catch (InterruptedException e) { // e.printStackTrace(); // } catch (ExecutionException e) { // e.printStackTrace(); // } ExecutorService executorService = Executors.newWorkStealingPool(); Future<Long> t = executorService.submit(sumTask); Long result2 = t.get(); System.out.println(result2); } @Override public Long call() throws Exception { return compute(); } } ~~~ ## 參考文檔 * https://www.zhihu.com/question/41134816 * 書籍:葛一鳴 *《Java高并發程序設計第二版》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看