国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java多線程處理list,速度提升嗖嗖的!

這篇具有很好參考價值的文章主要介紹了java多線程處理list,速度提升嗖嗖的!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

項目場景

問題描述

解決方案:

方法一:沒有返回值,直接在任務里完成計算

方法二:有返回值

最后


項目場景

前臺通過模板批量上傳數(shù)據(jù)到后臺


問題描述

后臺使用常規(guī)方法處理數(shù)據(jù),效率低下


解決方案:

使用多線程線程池實現(xiàn)

方法一:沒有返回值,直接在任務里完成計算

package com.lwk.test;


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ThreadPoolExample {

    public static void main(String[] args) throws InterruptedException {
        // 創(chuàng)建一個包含 10 個線程的線程池
        ExecutorService executorService = Executors.newFixedThreadPool(10);

        // 創(chuàng)建一個包含 10000 個元素的 List
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10001; i++) {
            list.add(i);
        }

        // 將 List 分成 10 個子 List,每個子 List 包含 1000 個元素
        List<List<Integer>> subLists = new ArrayList<>();
        int subListSize = 1000;
        for (int i = 0; i < list.size(); i += subListSize) {
            subLists.add(list.subList(i, Math.min(i + subListSize, list.size())));
        }

        // 提交每個子 List 的處理任務給線程池
        for (List<Integer> subList : subLists) {
            executorService.submit(new Task(subList));
        }

        // 等待線程池中所有任務執(zhí)行完畢
        executorService.shutdown();
        executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

        // 打印處理結果
        System.out.println("List size: " + list.size());
        System.out.println("Sum of elements: " + Task.getSum());
    }

    static class Task implements Runnable {
        private List<Integer> list;
        private static long sum = 0;

        public Task(List<Integer> list) {
            this.list = list;
        }

        @Override
        public void run() {
            long subSum = 0;
            for (int i : list) {
                subSum += i;
            }
            synchronized (Task.class) {
                sum += subSum;
            }
        }

        public static long getSum() {
            return sum;
        }
    }
}

方法二:有返回值

除了創(chuàng)建線程池和分割 List 的過程外,主要的變化是將 Task 類改為實現(xiàn) Callable 接口,并返回子 List 的和。使用 CompletionService 提交任務和獲取任務執(zhí)行結果,從而減少了線程池等待時間提高執(zhí)行效率。最后,將每個子 List 的和累加起來,打印處理結果。

package com.lwk.test;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

public class ThreadPoolExample2 {

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        // 創(chuàng)建一個包含 10 個線程的線程池
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        // 創(chuàng)建一個 CompletionService,用于提交任務和獲取任務執(zhí)行結果
        CompletionService<Long> completionService = new ExecutorCompletionService<>(executorService);

        // 創(chuàng)建一個包含 10000 個元素的 List
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10001; i++) {
            list.add(i);
        }

        // 將 List 分成 10 個子 List,每個子 List 包含 1000 個元素
        List<List<Integer>> subLists = new ArrayList<>();
        int subListSize = 1000;
        for (int i = 0; i < list.size(); i += subListSize) {
            subLists.add(list.subList(i, Math.min(i + subListSize, list.size())));
        }

        // 提交每個子 List 的處理任務給 CompletionService
        for (List<Integer> subList : subLists) {
            completionService.submit(new Task(subList));
        }

        // 獲取每個任務的執(zhí)行結果,并將結果累加起來
        long sum = 0;
        for (int i = 0; i < subLists.size(); i++) {
            Future<Long> future = completionService.take();
            sum += future.get();
        }

        // 打印處理結果
        System.out.println("List size: " + list.size());
        System.out.println("Sum of elements: " + sum);

        // 關閉線程池
        executorService.shutdown();
    }

    static class Task implements Callable<Long> {
        private List<Integer> list;

        public Task(List<Integer> list) {
            this.list = list;
        }

        @Override
        public Long call() throws Exception {
            long subSum = 0;
            for (int i : list) {
                subSum += i;
            }
            return subSum;
        }
    }
}

最后

如果改為項目中使用的話,需要將 【創(chuàng)建一個包含 10000 個元素的 List】改為自己的數(shù)據(jù)集即可!

需要注意的是:在使用線程池時,需要選擇合適的線程池大小,以避免創(chuàng)建過多的線程導致系統(tǒng)資源耗盡!

還有一點:也不要盲目的去開多個線程。如果你的服務器是單cpu單核開多線程反而會增加上下文損耗,從而降低程序執(zhí)行效率。能開多少個線程,理論是這樣計算的:邏輯cpu個數(shù) =?(物理cpu個數(shù) * 每個cpu的核心數(shù) * 超線程數(shù)),命令見如下

1.查看物理cpu個數(shù),也就是實物cpu的個數(shù)

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

2.查看每個cpu的core,也就是常說的核心數(shù)

cat /proc/cpuinfo| grep "cpu cores"| uniq

今天的分享就到這里了,如果問題歡迎留言指正!?文章來源地址http://www.zghlxwxcb.cn/news/detail-482943.html

到了這里,關于java多線程處理list,速度提升嗖嗖的!的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 解放計算力:使用并行處理提升python for循環(huán)速度

    解放計算力:使用并行處理提升python for循環(huán)速度

    Python 是一門功能強大的編程語言,但在處理大規(guī)模數(shù)據(jù)或復雜計算任務時,性能可能成為一個瓶頸。幸運的是,Python 提供了多種方法來提升性能,其中之一是利用并行處理來加速循環(huán)操作。本文將介紹如何使用并行處理技術來優(yōu)化 for 循環(huán),從而提高 Python 程序的執(zhí)行速度。

    2024年02月10日
    瀏覽(23)
  • 【Java并發(fā)】聊聊Future如何提升商品查詢速度

    【Java并發(fā)】聊聊Future如何提升商品查詢速度

    java中可以通過new thread、實現(xiàn)runnable來進行實現(xiàn)線程。但是唯一的缺點是沒有返回值、以及拋出異常,而callable就可以解決這個問題。通過配合使用futuretask來進行使用。 并且Future提供了對任務的操作,取消,查詢是否完成,獲取結果。 FutureTask核心代碼 基本屬性 任務 當線程

    2024年01月25日
    瀏覽(16)
  • python 開啟5個線程處理list數(shù)據(jù)

    你可以使用如下代碼來開啟5個線程來處理列表數(shù)據(jù): 在這個例子中,我們首先將要處理的列表劃分成了5個子列表,每個子列表包含5個元素。然后,我們創(chuàng)建5個線程,每個線程分別處理一個子列表。最后,等待所有線程執(zhí)行完畢。這樣可以同時處理多個子列表,在一定程度

    2024年02月12日
    瀏覽(18)
  • Java提升數(shù)據(jù)庫大數(shù)據(jù)查詢速度的幾種方式

    Java提升數(shù)據(jù)庫大數(shù)據(jù)查詢速度的幾種方式

    本文章以MySQL數(shù)據(jù)庫為用例說明,列舉出幾個常用的提升查詢速度的方式。 分頁查詢,在網絡瀏覽中,經常會看到分頁的使用,像百度搜索分頁、文檔資料分頁等,這些都是一種常見的提升數(shù)據(jù)查詢速度和用戶體驗的一種方式,數(shù)據(jù)庫有l(wèi)imit,開發(fā)人員可使用此

    2024年02月12日
    瀏覽(20)
  • Linux下線程池詳解與實現(xiàn):提升多任務處理效率的關鍵

    Linux下線程池詳解與實現(xiàn):提升多任務處理效率的關鍵

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??慕斯主頁 : 修仙—別有洞天 ?? ????????????????????????????????????????? ??? 今日夜電波: マイノリティ脈絡—ずっと真夜中でいいのに。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2024年04月14日
    瀏覽(19)
  • Springboot 多線程分批切割處理 大數(shù)據(jù)量List集合 ,實用示例

    Springboot 多線程分批切割處理 大數(shù)據(jù)量List集合 ,實用示例

    哲學提問鎮(zhèn)貼: 不了解異步怎么使用的看官, 可閱: SpringBoot 最簡單的使用異步線程案例 @Async_小目標青年的博客-CSDN博客 Springboot Async異步擴展使用 結合 CompletableFuture_小目標青年的博客-CSDN博客 想了解更多關于批量list處理操作的看官,可閱: ? Java List數(shù)據(jù)量大, 需要分片

    2024年02月06日
    瀏覽(22)
  • Java多線程文件下載器高文件下載速度

    在進行大文件下載時,使用多線程技術可以顯著提高下載速度。本文將介紹如何使用多線程下載器來實現(xiàn)并行下載,以加快文件下載過程。 多線程下載器是一種利用多線程同時下載文件的工具。它將大文件分割成多個小塊,并使用多個線程同時下載這些小塊文件。隨后,將下

    2024年02月11日
    瀏覽(22)
  • c#多線程—基礎概念到“雙色球”項目實現(xiàn)(附知識點目錄、代碼、視頻)

    c#多線程—基礎概念到“雙色球”項目實現(xiàn)(附知識點目錄、代碼、視頻)

    總結:視頻中對于多線程講的非常透徹,從線程基礎概念—.net不同版本出現(xiàn)的線程方法—多線程常出現(xiàn)問題—雙色球項目實踐,每個知識點都有代碼實操,受益匪淺。附上學習筆記和實操代碼。 視頻 線程:程序執(zhí)行的最小單位,任何操作都是由線程完成的,使用同步時,資

    2024年02月11日
    瀏覽(89)
  • 針對java中l(wèi)ist.parallelStream()的多線程數(shù)據(jù)安全問題我們采用什么方法最好呢?

    當使用List.parallelStream()方法進行多線程處理時,可能會涉及到數(shù)據(jù)安全問題。下面是一些常見的方法來處理parallelStream()的多線程數(shù)據(jù)安全問題: 1. 使用線程安全的集合:Java中提供了線程安全的集合類,如CopyOnWriteArrayList和synchronizedList等。可以將原始的List轉換為線程安全的集

    2024年02月10日
    瀏覽(72)
  • Java入門7(異常處理,list集合)

    一般來講,程序出現(xiàn)錯誤的時候,大致情況有三種: 語法錯誤 運行時錯誤,指的是各程序運行的時候,出現(xiàn)的一些沒有想到的問題,比如除數(shù)為0,比如數(shù)組下標越界等等 邏輯錯誤,運行結果和與其結果不一致,俗稱bug ?Java中的異常處理機制主要用于處理運行時錯誤 ?運行

    2024年02月03日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包