电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Java多線程并發(fā)執(zhí)行demo代碼實例

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

主類:MultiThread,執(zhí)行并發(fā)類

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> 為被處理的數(shù)據(jù)類型 * @param <T>返回數(shù)據(jù)類型 * 知識點1:X,T為泛型,為什么要用泛型,泛型和Object的區(qū)別請看: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:計數(shù)器,還是并發(fā)包大神 @author Doug Lea 編寫。是一個原子安全的計數(shù)器,可以利用它實現(xiàn)發(fā)令槍 private final CountDownLatch startLock = new CountDownLatch(1); // 啟動門,當所有線程就緒時調(diào)用countDown private final CountDownLatch endLock; // 結束門 private final List<X> listData;// 被處理的數(shù)據(jù) /** * @param list list.size()為多少個線程處理,list里面的H為被處理的數(shù)據(jù) */ public MultiThread(List<X> list) { if (list != null && list.size() > 0) { this.listData = list; exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); // 創(chuàng)建線程池,線程池共有nThread個線程 endLock = new CountDownLatch(list.size()); // 設置結束門計數(shù)器,當一個線程結束時調(diào)用countDown } else { listData = null; exec = null; endLock = null; } } /** * * @return 獲取每個線程處理結速的數(shù)組 * @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(); // 線程數(shù)量 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(); // 所有任務添加完畢,啟動門計數(shù)器減1,這時計數(shù)器為0,所有添加的任務開始執(zhí)行 endLock.await(); // 主線程阻塞,直到所有線程執(zhí)行完成 for (Future<T> future : queue) {resultList.add(future.get()); } exec.shutdown(); // 關閉線程池 } return resultList; } /** * 每一個線程執(zhí)行的功能,需要調(diào)用者來實現(xiàn) * @param currentThread 線程號 * @param data 每個線程被處理的數(shù)據(jù) * @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(); // 線程啟動后調(diào)用await,當前線程阻塞,只有啟動門計數(shù)器為0時當前線程才會往下執(zhí)行 T t = null; try {t = execute(currentThread, data); } finally {endLock.countDown(); // 線程執(zhí)行完畢,結束門計數(shù)器減1 } return t; } /** * 每一個線程執(zhí)行的功能 * @param currentThread 線程號 * @param data 每個線程被處理的數(shù)據(jù) * @return T返回對象 */ public abstract T execute(int currentThread, X data); }}

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

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

參數(shù)類:ParamVO,傳入?yún)?shù)類,根據(jù)實際情況替換成自己的

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(); } }}

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

Java多線程并發(fā)執(zhí)行demo代碼實例

Java多線程并發(fā)執(zhí)行demo代碼實例

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

標簽: Java
相關文章:
主站蜘蛛池模板: 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 钢木实验台-全钢实验台-化验室通风柜-实验室装修厂家-杭州博扬实验设备 | 鲸鱼视觉 -数字展厅多媒体互动展示制作公司 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 净化工程_无尘车间_无尘车间装修-广州科凌净化工程有限公司 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 517瓜水果特产网|一个专注特产好物的网站 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 99文库_实习生实用的范文资料文库站 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | uv机-uv灯-uvled光固化机-生产厂家-蓝盾机电 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 福尔卡(北京)新型材料技术股份有限公司| 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 南京泽朗生物科技有限公司 |