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

Java 多線程批量處理數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了Java 多線程批量處理數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1 需求
在項(xiàng)目開(kāi)發(fā)中需要處理100萬(wàn)多的數(shù)據(jù),這些數(shù)據(jù)需要從mysql數(shù)據(jù)庫(kù)中讀取出來(lái),再通過(guò)調(diào)用其他平臺(tái)的接口推送數(shù)據(jù)。由于時(shí)間緊迫,數(shù)據(jù)需要在短時(shí)間內(nèi)完成推送,采用單線程推送很慢,所以采用多線程推送來(lái)提高效率。

2 配置多線程
2.1 application.yml

thread-pool:
  core-pool-size: 4
  max-pool-size: 16
  queue-capacity: 80
  keep-alive-seconds: 120

2.2 創(chuàng)建ThreadPoolProperties

import lombok.Data;
import org.springframework.stereotype.Component;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@Component
@ConfigurationProperties(prefix = "thread-pool")
public class ThreadPoolProperties {
    /**
     * 線程池創(chuàng)建時(shí)候初始化的線程數(shù)
     */
    private int corePoolSize;

    /**
     * 線程池最大的線程數(shù),只有在緩沖隊(duì)列滿了之后才會(huì)申請(qǐng)超過(guò)核心線程數(shù)的線程
     */
    private int maxPoolSize;

    /**
     * 用來(lái)緩沖執(zhí)行任務(wù)的隊(duì)列
     */
    private int queueCapacity;

    /**
     * 允許線程的空閑時(shí)間:當(dāng)超過(guò)了核心線程出之外的線程在空閑時(shí)間到達(dá)之后會(huì)被銷毀
     */
    private int keepAliveSeconds;
}

2.3 創(chuàng)建ThreadPoolConfig

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@EnableAsync
@Configuration
public class ThreadPoolConfig {
    private final ThreadPoolProperties threadPoolProperties;

    @Autowired
    public ThreadPoolConfig(ThreadPoolProperties threadPoolProperties) {
        this.threadPoolProperties = threadPoolProperties;
    }

    @Bean(name = "threadPoolTaskExecutor")
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(threadPoolProperties.getCorePoolSize());
        executor.setMaxPoolSize(threadPoolProperties.getMaxPoolSize());
        executor.setQueueCapacity(threadPoolProperties.getQueueCapacity());
        executor.setKeepAliveSeconds(threadPoolProperties.getKeepAliveSeconds());
        executor.setThreadNamePrefix("thread-pool-");
        return executor;
    }
}

3 多線程批量數(shù)據(jù)處理

public RequestResult multiThreadPush() {
    List<HistoryStudent> historyStudentList = historyStudentMapper.getList(0, 65867);
    // 分割集合
    List<List<HistoryStudent>> partitionData = partitionData(historyStudentList, 4);

    ThreadPoolTaskExecutor executor = SpringUtil.getBean("threadPoolTaskExecutor", ThreadPoolTaskExecutor.class);
  	// 計(jì)數(shù)器
    CountDownLatch latch = new CountDownLatch(partitionData.size());

    for (List<HistoryStudent> historyStudents : partitionData) {
        executor.execute(() -> {
            try {
                for (HistoryStudent historyStudent : historyStudents) {
                	// 單個(gè)數(shù)據(jù)處理
                    //processSingleData(historyStudent);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                latch.countDown();
            }
        });
    }

    try {
        latch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    return RequestResult.success();
}
private List<List<HistoryStudent>> partitionData(List<HistoryStudent> dataList, int partitionSize) {
    List<List<HistoryStudent>> partitions = new ArrayList<>();

    int size = dataList.size();
    int batchSize = size / partitionSize;

    for (int i = 0; i < partitionSize; i++) {
        int fromIndex = i * batchSize;
        int toIndex = (i == partitionSize - 1) ? size : fromIndex + batchSize;

        partitions.add(dataList.subList(fromIndex, toIndex));
    }

    return partitions;
}

4 參考博客
Java多線程批量處理、線程池的使用
Java多線程處理大批量數(shù)據(jù)
java多線程批量處理數(shù)據(jù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-835171.html

到了這里,關(guān)于Java 多線程批量處理數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • redis 無(wú)占用 兩種方式 清除大批量數(shù)據(jù) lua腳本

    redis存儲(chǔ)了很多無(wú)用的key,占用了大量?jī)?nèi)存,需要清除 第一種 (顆粒度較大) lua腳本,刪除某些規(guī)則的key,輸入刪除的key,返回刪除的符合規(guī)則的key的數(shù)量 弊端:顆粒度比較大,發(fā)送一個(gè)lua腳本去執(zhí)行,會(huì)占用較多時(shí)間,堵塞其他redis命令 java代碼 這樣直接刪除,因?yàn)橐?guī)則有很

    2024年04月28日
    瀏覽(24)
  • Python 自動(dòng)獲取大批量excel數(shù)據(jù)并填寫到網(wǎng)頁(yè)表單(pandas;selenium)

    Python 自動(dòng)獲取大批量excel數(shù)據(jù)并填寫到網(wǎng)頁(yè)表單(pandas;selenium)

    自動(dòng)獲取大批量excel數(shù)據(jù)并填寫到網(wǎng)頁(yè)表單 部分網(wǎng)頁(yè)獲取下拉列表點(diǎn)擊的方式有所差異 這個(gè)請(qǐng)根據(jù)網(wǎng)頁(yè)源碼自做選擇 一定要學(xué)會(huì)使用IPDB調(diào)試工具 太好用了!?。?! 可能需要pip update一下 看提示 很好解決 沒(méi)有報(bào)錯(cuò)最好啦 Python真是太好用了 辦公利器?。。。?!

    2024年02月12日
    瀏覽(25)
  • 大批量數(shù)據(jù)導(dǎo)出csv,平替導(dǎo)出excel性能優(yōu)化解決方案封裝工具類

    ? ? ? ? 有些業(yè)務(wù)邏輯需要在導(dǎo)出非常大量的數(shù)據(jù),幾百甚至幾千萬(wàn)的數(shù)據(jù)這個(gè)時(shí)候再導(dǎo)出excel來(lái)對(duì)于性能都不是很友好,這個(gè)時(shí)候就需要替換實(shí)現(xiàn)思路來(lái)解決這個(gè)問(wèn)題。 ? ? ? ? 本文章提供了兩種解決的方案,也是兩種從數(shù)據(jù)庫(kù)中拿取數(shù)據(jù)的方式一種是原生的jdbc一種是使用

    2024年01月16日
    瀏覽(27)
  • 【sgTransfer】自定義組件:帶有翻頁(yè)、頁(yè)碼、分頁(yè)器的穿梭框組件,支持大批量數(shù)據(jù)的穿梭顯示。

    【sgTransfer】自定義組件:帶有翻頁(yè)、頁(yè)碼、分頁(yè)器的穿梭框組件,支持大批量數(shù)據(jù)的穿梭顯示。

    ? 特性: ? 表格寬度可以自定義 翻頁(yè)器顯示控件可以自定義 列配置項(xiàng)可以設(shè)置顯示字段列名稱、寬度、字段名 可以配置搜索框提示文本,支持搜索過(guò)濾 穿梭框頂部標(biāo)題可以自定義 左右箭頭按鈕文本可以設(shè)置

    2024年02月10日
    瀏覽(22)
  • cesium實(shí)現(xiàn)大批量POI點(diǎn)位聚合渲染優(yōu)化方案

    cesium實(shí)現(xiàn)大批量POI點(diǎn)位聚合渲染優(yōu)化方案

    cesium目前只提供了entityCluster這個(gè)聚合類,使打點(diǎn)聚合更方便快捷的實(shí)現(xiàn),但是一般在真正做項(xiàng)目的時(shí)候,大家會(huì)經(jīng)常碰到成千上萬(wàn)個(gè)甚至幾十萬(wàn)個(gè)點(diǎn)位需要聚合打點(diǎn),那這時(shí)候你如果還是用entity去實(shí)現(xiàn)的話,怕是要被用戶按在地上瘋狂摩擦,摩擦。。。?? 我們可以通過(guò)模擬

    2024年02月09日
    瀏覽(22)
  • 如何使用python快速將大批量圖片合成為視頻?

    如何使用python快速將大批量圖片合成為視頻?

    由于CSDN大批量導(dǎo)入圖片容易出現(xiàn)亂序,本程序?qū)⒅螆D片轉(zhuǎn)為視頻,便于用視頻的方式展示文件內(nèi)容。 由于圖片名稱復(fù)雜多樣,為便于統(tǒng)一化處理,增強(qiáng)程序的通用性,使用改名程序可以降低手動(dòng)調(diào)整的復(fù)雜度。 改名之后的效果: 注意此部分的圖片大小仍需要手動(dòng)修改或輸

    2024年02月04日
    瀏覽(21)
  • 遠(yuǎn)程運(yùn)維大批量IT設(shè)備?向日葵批量部署、分組授權(quán)與安全功能解析

    遠(yuǎn)程運(yùn)維大批量IT設(shè)備?向日葵批量部署、分組授權(quán)與安全功能解析

    數(shù)字化轉(zhuǎn)型的不斷推進(jìn),給予了企業(yè)全方位的賦能,但任何發(fā)展都伴隨著成本與代價(jià),比如在數(shù)字化轉(zhuǎn)型過(guò)程中企業(yè)內(nèi)部辦公與外部業(yè)務(wù)所需的不斷增加的IT設(shè)備數(shù)量,就為日常的運(yùn)維工作提出了更大的挑戰(zhàn)。 針對(duì)企業(yè)面對(duì)海量IT設(shè)備時(shí)的運(yùn)維難、效率低、容易出錯(cuò)等問(wèn)題,

    2024年02月14日
    瀏覽(23)
  • 使用postman做接口測(cè)試傳入大批量動(dòng)態(tài)參數(shù)的方法

    使用postman做接口測(cè)試傳入大批量動(dòng)態(tài)參數(shù)的方法

    postman是一個(gè)非常好用的接口測(cè)試工具,而且功能也很強(qiáng)大,今天只簡(jiǎn)單說(shuō)一下使用postman如何對(duì)一個(gè)接口傳入大批量參數(shù)進(jìn)行測(cè)試的方法。 以我測(cè)試的平臺(tái)為例,我們的平臺(tái)是做在線教育平臺(tái)的,我模擬的場(chǎng)景是老師有一門課叫ABC,現(xiàn)在需要有1000個(gè)學(xué)生加入ABC這門課。我們不

    2024年01月23日
    瀏覽(33)
  • 記一次 OSS 大批量文件下載的實(shí)現(xiàn) → bat腳本不好玩!

    記一次 OSS 大批量文件下載的實(shí)現(xiàn) → bat腳本不好玩!

    一天夜里,侄女跟我哥聊天 侄女一臉期待的看著我哥:爸爸,你說(shuō)媽媽和奶奶誰(shuí)漂亮?。?我哥不慌不忙的拿起一粒瓜子,輕聲說(shuō)道:為啥沒(méi)有你啊? 侄女笑容漸起,似乎得到了她想要的回答,仍繼續(xù)問(wèn)道:那媽媽和奶奶還有我,誰(shuí)漂亮? 我哥瞄了一眼侄女,又拿起一粒瓜子

    2024年02月05日
    瀏覽(20)
  • ZooKeeper+Kafka+ELK+Filebeat集群搭建實(shí)現(xiàn)大批量日志收集和展示

    ZooKeeper+Kafka+ELK+Filebeat集群搭建實(shí)現(xiàn)大批量日志收集和展示

    大致流程:將nginx 服務(wù)器(web-filebeat)的日志通過(guò)filebeat收集之后,存儲(chǔ)到緩存服務(wù)器kafka,之后logstash到kafka服務(wù)器上取出相應(yīng)日志,經(jīng)過(guò)處理后寫入到elasticsearch服務(wù)器并在kibana上展示。 一、集群環(huán)境準(zhǔn)備 二、搭建zookeeper集群 前提條件:三臺(tái)機(jī)器分別修改時(shí)區(qū)、關(guān)閉防火墻

    2024年02月04日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包