日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java多線程并發執行demo代碼實例

瀏覽:92日期:2022-08-30 11:45:30

主類:MultiThread,執行并發類

package java8test;import java.util.ArrayList;import java.util.List;import java.util.concurrent.BlockingQueue;import java.util.concurrent.Callable;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.LinkedBlockingQueue;/** * @param <H> 為被處理的數據類型 * @param <T>返回數據類型 * 知識點1:X,T為泛型,為什么要用泛型,泛型和Object的區別請看:https://www.cnblogs.com/xiaoxiong2015/p/12705815.html */public abstract class MultiThread<X, T> { public static int i = 0; // 知識點2:線程池:https://www.cnblogs.com/xiaoxiong2015/p/12706153.html private final ExecutorService exec; // 線程池 // 知識點3:@author Doung Lea 隊列:https://www.cnblogs.com/xiaoxiong2015/p/12825636.html private final BlockingQueue<Future<T>> queue = new LinkedBlockingQueue<>(); // 知識點4:計數器,還是并發包大神 @author Doug Lea 編寫。是一個原子安全的計數器,可以利用它實現發令槍 private final CountDownLatch startLock = new CountDownLatch(1); // 啟動門,當所有線程就緒時調用countDown private final CountDownLatch endLock; // 結束門 private final List<X> listData;// 被處理的數據 /** * @param list list.size()為多少個線程處理,list里面的H為被處理的數據 */ public MultiThread(List<X> list) { if (list != null && list.size() > 0) { this.listData = list; exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); // 創建線程池,線程池共有nThread個線程 endLock = new CountDownLatch(list.size()); // 設置結束門計數器,當一個線程結束時調用countDown } else { listData = null; exec = null; endLock = null; } } /** * * @return 獲取每個線程處理結速的數組 * @throws InterruptedException * @throws ExecutionException */ public List<T> getResult() throws InterruptedException, ExecutionException { List<T> resultList = new ArrayList<>(); if (listData != null && listData.size() > 0) { int nThread = listData.size(); // 線程數量 for (int i = 0; i < nThread; i++) {X data = listData.get(i);Future<T> future = exec.submit(new Task(i, data) { @Override public T execute(int currentThread, X data) { return outExecute(currentThread, data); }}); // 將任務提交到線程池queue.add(future); // 將Future實例添加至隊列 } startLock.countDown(); // 所有任務添加完畢,啟動門計數器減1,這時計數器為0,所有添加的任務開始執行 endLock.await(); // 主線程阻塞,直到所有線程執行完成 for (Future<T> future : queue) {resultList.add(future.get()); } exec.shutdown(); // 關閉線程池 } return resultList; } /** * 每一個線程執行的功能,需要調用者來實現 * @param currentThread 線程號 * @param data 每個線程被處理的數據 * @return T返回對象 */ public abstract T outExecute(int currentThread, X data); /** * 線程類 */ private abstract class Task implements Callable<T> { private int currentThread;// 當前線程號 private X data; public Task(int currentThread, X data) { this.currentThread = currentThread; this.data = data; } @Override public T call() throws Exception { // startLock.await(); // 線程啟動后調用await,當前線程阻塞,只有啟動門計數器為0時當前線程才會往下執行 T t = null; try {t = execute(currentThread, data); } finally {endLock.countDown(); // 線程執行完畢,結束門計數器減1 } return t; } /** * 每一個線程執行的功能 * @param currentThread 線程號 * @param data 每個線程被處理的數據 * @return T返回對象 */ public abstract T execute(int currentThread, X data); }}

結果類:ResultVO,保存返回結果,根據實際情況替換成自己的

package java8test;public class ResultVo { int i; public ResultVo(int i) { this.i = i; } public ResultVo() { // TODO Auto-generated constructor stub }}

參數類:ParamVO,傳入參數類,根據實際情況替換成自己的

package java8test;public class ParamVo { private int i; ParamVo(int i) { this.i = i; } public int getI() { return i; } @Override public String toString() { return String.valueOf(i) + ' ' + hashCode(); }}

測試類:new兩個MultiThread,可以看到MultiThread這個類不存在線程安全問題。

package java8test;import java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { try { List<ParamVo> splitList = new ArrayList<ParamVo>(); for (int i = 0; i < 100; i++) {splitList.add(new ParamVo(i)); } List<ParamVo> splitList1 = new ArrayList<ParamVo>(); for (int i = 200; i < 300; i++) {splitList1.add(new ParamVo(i)); } MultiThread<ParamVo, ResultVo> multiThread = new MultiThread<ParamVo, ResultVo>(splitList) {@Overridepublic ResultVo outExecute(int currentThread, ParamVo data) { System.out.println('當前線程名稱:' + Thread.currentThread().getName() + '當前線程號=' + currentThread + ' data=' + data); i--; return new ResultVo(data.getI());} }; MultiThread<ParamVo, ResultVo> multiThread1 = new MultiThread<ParamVo, ResultVo>(splitList1) {@Overridepublic ResultVo outExecute(int currentThread, ParamVo data) { System.out.println('當前線程名稱:' + Thread.currentThread().getName() + '當前線程號=' + currentThread + ' data=' + data); i--; return new ResultVo(data.getI());} }; List<ResultVo> list = multiThread.getResult(); List<ResultVo> list1 = multiThread1.getResult(); // 獲取每一批次處理結果 System.out.println('獲取處理結果........................'); for (ResultVo vo : list) {System.out.println(vo.i); } System.out.println('獲取1處理結果........................'); for (ResultVo vo : list1) {System.out.println(vo.i); } } catch (Exception e) { e.printStackTrace(); } }}

這個類也用在了生產當中,用來并發插入數據。但是事務不能被管控,需要自己保證最終事務一致。需要注意。

Java多線程并發執行demo代碼實例

Java多線程并發執行demo代碼實例

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美激情 亚洲a∨综合| 日本99精品| а√在线中文在线新版| 日韩综合一区| 91久久久精品国产| 久久中文亚洲字幕| 国产一区二区精品| 亚洲精品高潮| 麻豆免费精品视频| 欧美中文字幕一区二区| 亚洲一区国产一区| 日韩国产欧美在线播放| 国产精品sm| 欧美亚洲国产一区| 婷婷综合在线| 国产精东传媒成人av电影| 黄色不卡一区| 日韩精品视频一区二区三区| 欧美激情亚洲| 影音先锋国产精品| 国产乱码精品一区二区三区亚洲人| 免费看久久久| 免费的成人av| 伊人久久视频| 国产精品久久乐| 精品一区三区| 精品无人区麻豆乱码久久久| 欧美专区在线| 国产乱码午夜在线视频| 好吊一区二区三区| 国产精品羞羞答答在线观看| 欧美va天堂在线| 精品精品国产三级a∨在线| 一区二区三区国产盗摄| 亚洲五月婷婷| 久久激情婷婷| 欧美日韩中文一区二区| 999久久久精品国产| 欧美日韩国产在线观看网站| 伊人久久婷婷| 亚洲乱亚洲高清| 欧美激情99| 日韩一区二区在线免费| 久久国产主播| 蜜桃成人av| 婷婷成人综合| 免费人成在线不卡| 久久xxx视频| 综合欧美亚洲| 巨乳诱惑日韩免费av| 一区二区亚洲精品| 91精品xxx在线观看| 欧美亚洲人成在线| 日韩中文字幕麻豆| 美女亚洲一区| 久久精选视频| 美女久久精品| 精品国产精品国产偷麻豆| 青草久久视频| 综合一区在线| 国产精品va| 欧美三区四区| 老司机精品久久| 日韩欧美另类一区二区| а√天堂8资源在线| 99久久九九| 国产精品普通话对白| 视频在线观看国产精品| 日本色综合中文字幕| 久久精品国产精品亚洲毛片| 中文字幕在线看片| 影院欧美亚洲| 国产欧美久久一区二区三区| 国产日本精品| 国产精品99久久久久久董美香| 日韩精品一级| 国产一区二区三区久久久久久久久| 天堂√中文最新版在线| 精品国产亚洲日本| 日韩欧美一区二区三区在线视频 | 欧美交a欧美精品喷水| 国产一区二区三区精品在线观看| 久久成人精品| 蜜臀国产一区| 欧美精品影院| 亚洲午夜免费| 久久激情五月激情| 婷婷综合六月| 久久久久.com| 欧美女激情福利| 激情欧美国产欧美| 鲁大师精品99久久久| 免费美女久久99| 99精品在线观看| www.51av欧美视频| 免费观看亚洲天堂| 国产日韩欧美一区二区三区| 喷白浆一区二区| 伊人久久亚洲影院| 国产99精品| 日韩精品1区| 日韩在线欧美| 麻豆视频在线看| 国产欧美激情| 日本91福利区| 日韩va欧美va亚洲va久久| 亚洲少妇在线| 国产手机视频一区二区| 亚洲高清二区| 亚洲精品小说| 99日韩精品| 在线日韩成人| 亚洲精品无播放器在线播放| 亚洲欧美一级| 日韩福利视频网| 亚洲a成人v| a天堂资源在线| 欧美日韩精品一区二区三区在线观看| 日本精品不卡| 四季av一区二区凹凸精品| 色一区二区三区| 午夜亚洲福利| 欧美激情99| 日韩激情一区二区| 麻豆一区二区三| 老司机精品久久| 欧美午夜不卡影院在线观看完整版免费| 日本久久精品| 亚洲欧美网站在线观看| 首页国产欧美久久| 成人国产综合| 中文国产一区| 精品午夜久久| 激情视频一区二区三区| 久久精品播放| 久久精品超碰| 99国产精品99久久久久久粉嫩| 欧美特黄一级| 清纯唯美亚洲综合一区| 精品网站999| 欧美日韩国产传媒| 国产精品一级| 人在线成免费视频| 天堂av在线一区| 欧美视频精品全部免费观看| 久久成人高清| 欧美亚洲在线日韩| 国产日韩一区二区三区在线播放| 欧美成人一二区| 日韩1区2区日韩1区2区| 免费日韩av片| 视频一区在线视频| 久久男人天堂| 国产极品一区| 综合精品一区| 亚洲精品系列| 不卡专区在线| 日韩高清欧美| 国产精品免费看| 日韩欧美四区| 精品日韩在线| 999久久久免费精品国产| 亚洲在线一区| 亚欧成人精品| 国内精品美女在线观看| 亚洲不卡av不卡一区二区| 香蕉久久夜色精品国产| 天堂网在线观看国产精品| 久久99久久人婷婷精品综合| 一级欧洲+日本+国产| 97精品中文字幕| 久久精品国产一区二区| 日本精品一区二区三区在线观看视频| 精品国产亚洲日本| 国产激情久久| 日韩avvvv在线播放| 亚洲精品日韩久久| 麻豆精品91| 香蕉久久精品| 欧美丝袜一区| 国产精品美女久久久| 蜜桃久久精品一区二区| 亚洲一区二区动漫| 巨乳诱惑日韩免费av| 婷婷综合电影| 影音先锋久久精品| 欧美日韩亚洲一区二区三区在线 | 中文字幕日本一区| 国产精品极品在线观看| 日韩欧美看国产| 亚洲理论在线| 日韩1区2区日韩1区2区| 亚洲性视频在线| 日韩精品1区2区3区| 精品国产欧美日韩| 在线看片一区| 蜜桃精品在线| 国产精品亚洲人成在99www | 国产精品欧美大片| 99国产精品|