1. 程式人生 > >多執行緒處理list業務邏輯(大數量)

多執行緒處理list業務邏輯(大數量)

       
        List<Long> listsSelect = 查詢到的list;
        
        // 建立一個固定大小的執行緒池
        ExecutorService executorService = Executors.newFixedThreadPool(5);

        if (!CollectionUtils.isEmpty(listsSelect)) {
            // 多執行緒按批處理
            int size = listsSelect.size();
            for (int i = 0; i < threadNum; i++) {
                List<Long> a = new ArrayList<Long>();

                for (int j = i; j < size; j += threadNum) {
                    a.add(listsSelect.get(j));
                }

                if (a != null && a.size() > 0) {
                    List<List<Long>> ridLists = ListUtil.splitList(a, 10);
                    executorService.execute(executor(ridLists));
                }

            }

            try {
                executorService.shutdown();
                executorService.awaitTermination(1, TimeUnit.HOURS);
            } catch (Exception e) {
                
            }

        }
        
        private Runnable executor(final List<List<Long>> b) {
        Runnable run = new Runnable() {
            @Override
            public void run() {
                try {
                    for (int i = 0; i < b.size(); i++) {
                        long startTime = System.currentTimeMillis();
                        List<Long> ridList = b.get(i);

                        for (int j = 0; j < ridList.size(); j++) {
                            //業務邏輯處理
                        }

                        long endTime = System.currentTimeMillis();
                        
                    }
                } catch (Exception e) {
                    
                }

            }
        };
        return run;
    }
    
     public static <T> List<List<T>> splitList(List<T> lists, int limit) {
        int size = lists.size();
        List<List<T>> list = new ArrayList<List<T>>();
        if (limit > size) {
            list.add(lists);
            return list;
        }
        int length = size/limit +1;
        for(int i=0 ; i < length ; i ++){
            List<T> subList = new ArrayList<T>();
            for(int j =i ; j < size ; j += length){
                subList.add(lists.get(j));
            }
            list.add(subList);
        }
        
        return list;
    }

相關推薦

執行處理list業務邏輯(數量)

                List<Long> listsSelect = 查詢到的list;                  // 建立一個固定大小的執行緒池         ExecutorService executorService = Exe

執行處理list

package com.zhx.web.invoice.service; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import

ThreadUtil 執行處理List,回撥處理具體的任務

每次想多執行緒處理一個大的結果集的時候 都需要寫一大堆程式碼,自己寫了個工具類 方便使用 package com.guige.fss.common.util; import com.guige.fss.common.exception.BusinessException; im

JAVA 執行處理資料LIST

package com.sinosoft.audit; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CountDo

java 執行處理一個list的集合

2016年08月03日 09:16:20 package A; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import j

執行處理一個list的集合

import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurren

Android 執行處理執行用法集合

handler.post(r)其實這樣並不會新起執行緒,只是執行的runnable裡的run()方法,卻沒有執行start()方法,所以runnable走的還是UI執行緒。 1.如果像這樣,是可以操作ui,但是run還是走在主執行緒,見打印出來的Log執行緒名字是mai

Android 執行處理執行用法集合 第 1 頁

handler.post(r)其實這樣並不會新起執行緒,只是執行的runnable裡的run()方法,卻沒有執行start()方法,所以runnable走的還是UI執行緒。 1.如果像這樣,是可以操作ui,但是run還是走在主執行緒,見打印出來的Log執行緒名字是mai

執行處理慢sql查詢小筆記~

多執行緒處理慢sql查詢以及List(Array)的拆分 系統資料量不大,但是訪問速度特別慢,使用多執行緒優化一下!!! 優化結果:訪問時間縮短了十幾秒  25s --> 8s 一、List的拆分:Iterables.partition 注意: 引入的包為google名下的   &n

HTML5學習之WebWork執行處理

  多執行緒技術在服務端技術中已經發展的很成熟了,而在Web端的應用中卻一直是雞肋 在新的標準中,提供的新的WebWork API,讓前端的非同步工作變得異常簡單。 使用:建立一個Worker物件,指向一個js檔案,然後通過Worker

python 執行處理佇列

轉載自: https://blog.csdn.net/u011655220/article/details/79037032 from threading import Thread import time import random from queue import Queue from co

[SimplePlayer] 7. 執行處理

在前面的文章中,我們分別實現了視訊影象解碼、播放,音訊解碼、播放,現在則需要把這些功能組合起來。總體上來說,整個程式的功能可以分為兩條線路:視訊以及音訊,兩條線之間除了後續的同步操作之外基本沒有任何關聯。而線上路當中,各個模組之間並沒有太緊密的耦合,只要上游模組提供了原料,下游模組就可以執行處理。因此,我們可

IOS儲存張圖片 執行處理

儲存多張圖片的時候,既要控制不丟圖片,又要控制圖片可以多執行緒。提高儲存速度,防止程式崩潰,防止使用者等待時間過久 這裡我們可以使用Photos框架的PHPhotoLibrary類,這個可以幫助你多執行緒儲存圖片 -(void)saveBtn { [SSGOTools againRe

通過執行處理提高Redis效能

Redis通常被稱為單程序單執行緒模型。 這不是真的! Redis還執行多個後端執行緒來執行後端清理工作,例如清理髒資料和關閉檔案描述符。在Redis中,主執行緒負責主要任務,包括但不限於:接收來自客戶端的連線,處理連線讀/寫事件,解析請求,處理命令,處理定時器事件和同步資料。只有一個CPU核心執行單個程

(CSDN遷移) JAVA執行實現-可控最併發數執行池(newFixedThreadPool)

上篇文章中介紹了單執行緒化執行緒池newSingleThreadExecutor,可控最大併發數執行緒池(newFixedThreadPool)與其最大的區別是可以通知執行多個執行緒,可以簡單的將newSingleThreadExecutor理解為newFixedThreadPool(1)。例如執行一下兩個程

python 執行處理IO操作

from threading import Thread 方法1 t = Thread(target=func, args=(1,)) t.start() 方法2 clasee MyT

C# 執行List執行安全問題

網上關於List的執行緒安全問題將的很少,所以自己實驗了一把,發現確實是執行緒不安全的.所以當你在進行多執行緒程式設計中使用了共享的List集合,必須對其進行執行緒安全處理. List的Add方法是執行緒不安全的,List的原始碼中的Add方法,使用了每次噹噹前的元素達到上限,通過建立一個新的陣列例項,並給

Python下的執行處理

########多執行緒######### ## 執行緒的概念與多執行緒的引入     一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。另外,執行緒是程序中的一個實體,一個程序裡面必然會有一個主執行緒,是被系統獨立排程和分派的基本

Unity 編輯器下執行處理檔案

原因 在unity編輯器下打算用多執行緒來查詢處理裡面的資源,但又想阻塞主執行緒,防止使用者操作unity,又能準確顯示多執行緒的進度。在分析unity編輯器的使用多執行緒示例後,發現可以用 ManualResetEvent 訊號來通知主執行緒。 解決 主執行緒阻塞掉,

執行處理執行網路程式設計問題

1、 一個伺服器,多個客戶端訪問。 2、多個伺服器多執行緒接收多個客戶端,但是埠號是固定的。 java 網路程式設計之TCP +多執行緒 + 執行緒池 資料: https://blog.csdn.net/tanghui270270/article/details/80603199