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

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

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

瀏覽:94日期: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久久,三上悠亚国产精品一区二区三区
免费观看不卡av| 日韩国产在线观看一区| 欧美激情 亚洲a∨综合| 国产精品片aa在线观看| 国产欧美日韩一区二区三区在线| 亚洲欧洲一区| av成人国产| 另类专区亚洲| 精品色999| 97精品97| 色天使综合视频| 激情综合网五月| 石原莉奈一区二区三区在线观看| 国产伦精品一区二区三区视频| 亚洲精品一二三区区别| 日本欧美一区二区| 欧美天堂视频| 在线国产精品一区| 久久影院资源站| 好吊视频一区二区三区四区| 一二三区精品| 精品视频一区二区三区在线观看| 亚洲小说欧美另类婷婷| 日本免费在线视频不卡一不卡二| 日韩成人精品一区二区| 亚洲一区欧美激情| 久久久久久亚洲精品美女| 欧美精品一区二区三区精品| 国产伦理一区| 影音国产精品| 韩国女主播一区二区三区| 老司机久久99久久精品播放免费| 国产极品一区| 丝袜美腿亚洲一区二区图片| 久久精品国产99国产| 国产精品毛片| 久久精品免费看| 综合视频一区| 色婷婷精品视频| 国产精品尤物| 丝袜诱惑制服诱惑色一区在线观看| 精品美女久久| 日本不卡一区二区三区| 欧美综合另类| 美女视频黄 久久| 日韩在线麻豆| 午夜久久福利| 国产精品毛片一区二区在线看| 亚洲日产av中文字幕| 日韩精品水蜜桃| 牛牛精品成人免费视频| 亚洲天堂免费| 欧美日韩国产传媒| av中文字幕在线观看第一页| 国产亚洲高清在线观看| 蜜芽一区二区三区| 999久久久精品国产| 精品国产乱码久久久久久樱花| 日本午夜免费一区二区| 亚洲欧美日韩视频二区| 91精品国产成人观看| 久久精品国产亚洲aⅴ| 日本一区二区三区中文字幕| 亚洲免费精品| 久久久蜜桃一区二区人| 国产精品欧美大片| 亚洲精品影视| 欧美资源在线| 亚洲天堂黄色| 日本免费一区二区三区四区| 久久永久免费| 国产乱码精品| 国产无遮挡裸体免费久久 | 亚洲伊人av| 欧美国产先锋| 欧美在线观看天堂一区二区三区| 日韩中文欧美在线| 欧美成人国产| 99久久夜色精品国产亚洲狼 | 日韩欧美四区| 香蕉久久夜色精品国产| 久久精品亚洲欧美日韩精品中文字幕| 精品久久久久中文字幕小说| 免费视频一区二区三区在线观看| 日韩超碰人人爽人人做人人添| 日韩在线卡一卡二| 妖精视频成人观看www| 亚州av乱码久久精品蜜桃| 99热精品久久| 久久国产电影| 伊人精品一区| 亚洲国产日韩欧美在线| 久久久久99| 天堂资源在线亚洲| 久久久久久久久久久9不雅视频| 日韩在线欧美| 国产亚洲一区二区手机在线观看| 亚洲永久av| 色爱综合av| 2023国产精品久久久精品双| 夜久久久久久| 亚洲精品一二三**| 日本精品久久| 国产毛片精品久久| 久久av国产紧身裤| 精品久久久亚洲| 中文字幕在线免费观看视频| 国产成人精品免费视| 深夜视频一区二区| 欧美日韩国产一区精品一区| 亚洲一区欧美激情| 四虎精品永久免费| 国产精品网址| 91日韩欧美| 欧美 日韩 国产一区二区在线视频 | 亚洲资源在线| 欧美一区成人| 麻豆视频久久| 日韩欧美不卡| 亚洲二区三区不卡| 综合亚洲视频| 欧美一区二区三区久久精品| 精品国产黄a∨片高清在线| 日韩毛片在线| 亚洲主播在线| 日韩高清在线不卡| 精品国产网站| 在线日韩欧美| 日本欧美久久久久免费播放网| 免费在线欧美黄色| 亲子伦视频一区二区三区| 免费日韩av片| 欧美精品国产| 欧洲精品一区二区三区| 亚洲国产日韩欧美在线| 日本一不卡视频| 国产成年精品| 国产一级久久| 国产精品欧美一区二区三区不卡| 在线一区av| 蜜臀av在线播放一区二区三区 | 麻豆精品在线观看| 欧美成a人免费观看久久| 亚洲综合二区| 国产精品久久亚洲不卡| 激情国产在线| 老司机久久99久久精品播放免费| 国产欧美日韩免费观看| 国产精品国产三级国产在线观看| 日韩在线精品| 日欧美一区二区| 福利一区和二区| 日韩中文字幕不卡| 精品网站999| 久久不射网站| 久久精品国产亚洲一区二区三区| 亚洲国内欧美| 国产乱码精品一区二区三区四区| 久久精品国产www456c0m| 日韩黄色在线观看| 久久精品欧美一区| 欧美日韩亚洲一区在线观看| 亚洲h色精品| 国产一卡不卡| japanese国产精品| 国产精品久久亚洲不卡| 日韩视频二区| 国产一区二区三区免费在线| 视频一区欧美日韩| 国产成人精品亚洲日本在线观看| 日韩一区网站| 久久在线免费| 麻豆国产欧美一区二区三区| 亚洲专区一区| 日韩成人三级| 日韩精品视频网| 91超碰国产精品| 成年男女免费视频网站不卡| 中文字幕一区二区精品区| 性感美女一区二区在线观看| 国产三级一区| 国产精品毛片| 日韩高清中文字幕一区二区| 久久国产欧美日韩精品| 久久福利一区| 欧美日韩在线播放视频| 精品淫伦v久久水蜜桃| 亚洲精品乱码久久久久久蜜桃麻豆| 蜜桃成人精品| 牛牛精品成人免费视频| 亚洲精品福利| 午夜精品一区二区三区国产| 福利视频一区| 欧美日韩午夜电影网| 国产精品嫩草99av在线| 精品免费av在线| 精品国产乱码| 国产高清亚洲| 97精品资源在线观看| 免费国产自线拍一欧美视频|