Java多線程實戰

Java多線程實戰

java多線程(超詳細)
java自定義線程池總結

Java創建線程方式

  • 方法1,繼承Thread類

  • 方法2,實現Runable接口

  • 方法2-2,匿名內部類形式+lambda表達式

  • 方法3,實現Callable接口,允許有返回值

  • 方法4,線程池方式
    常見線程池:
    在這里插入圖片描述

public class ThreadTest {public static void main(String[] args) {// 方法一MyThread myThread = new MyThread();myThread.start();// 方法2MyRunable myRunable = new MyRunable();Thread thread = new Thread(myRunable);thread.start();// 方法2-2Thread thread1 = new Thread(() -> {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "匿名線程形式運行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}});thread1.start();// 方法3MyCallable myCallable = new MyCallable();FutureTask futureTask = new FutureTask<>(myCallable);Thread thread2 = new Thread(futureTask);thread2.start();try {Object o = futureTask.get();System.out.println(o);} catch (InterruptedException e) {throw new RuntimeException(e);} catch (ExecutionException e) {throw new RuntimeException(e);}// 方法4-線程池,常有線程池ExecutorService threadPool = Executors.newFixedThreadPool(10);threadPool.execute(myThread);threadPool.execute(myRunable);Future<?> ret = threadPool.submit(() -> {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "Callable形式運行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}return "yangshun";});try {System.out.println(ret.get());} catch (InterruptedException e) {throw new RuntimeException(e);} catch (ExecutionException e) {throw new RuntimeException(e);}threadPool.shutdown();// 方法4-2:自定義線程池ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 				//coreSize2, 				//MaxSize60, 			//60TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),			//指定一種隊列 (有界隊列),new ThreadPoolExecutor.CallerRunsPolicy()                          //自定義拒絕策略//, new DiscardOldestPolicy()               //可以使用默認拒絕策略);ThreadPoolExecutor executor = new ThreadPoolExecutor(// 核心線程數3,// 最大線程數5,// 空閑線程最大存活時間60L,// 空閑線程最大存活時間單位TimeUnit.SECONDS,// 等待隊列及大小new ArrayBlockingQueue<>(100),// 創建新線程時使用的工廠Executors.defaultThreadFactory(),// 當線程池達到最大時的處理策略
//                new ThreadPoolExecutor.AbortPolicy()          // 拋出RejectedExecutionHandler異常new ThreadPoolExecutor.CallerRunsPolicy()       // 交由調用者的線程執行
//                new ThreadPoolExecutor.DiscardOldestPolicy()  // 丟掉最早未處理的任務
//                new ThreadPoolExecutor.DiscardPolicy()        // 丟掉新提交的任務);// 總共5個任務for (int i = 1; i <= 5; i++) {int taskIndex = i;executor.execute(() -> {System.out.println("線程 " + Thread.currentThread().getName() + " 正在執行任務 " + taskIndex);// 每個任務耗時1秒try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}});}executor.shutdown();System.out.println("主線程運行結束");}@Testpublic void test() {ExecutorService threadPool = Executors.newCachedThreadPool();for(int i = 0; i < 100; i++) {try {Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}threadPool.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "正在執行中。。。");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});}threadPool.shutdown();}}
class MyCallable implements Callable{@Overridepublic Object call() throws Exception {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "Callable形式運行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}return "運行成功!yes";}
}
class MyThread extends Thread {@Overridepublic void run() {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "運行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}}
}class MyRunable implements Runnable {@Overridepublic void run() {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "Runable形式運行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}}
}

SpringBoot創建線程方式

【并發編程】SpringBoot創建線程池的六種方式

java并發學習–第二章 spring boot實現線程的創建

CompletableFuture使用

Java多線程(十): FutureTask CompletableFuture詳解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40004.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40004.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40004.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【深入理解Linux內核鎖】三、原子操作

我的圈子: 高級工程師聚集地 我是董哥,高級嵌入式軟件開發工程師,從事嵌入式Linux驅動開發和系統開發,曾就職于世界500強企業! 創作理念:專注分享高質量嵌入式文章,讓大家讀有所得! 文章目錄 1、原子操作思想2、整型變量原子操作2.1 API接口2.2 API實現2.2.1 原子變量結…

Shell 函數

Shell 函數 linux shell 可以用戶定義函數&#xff0c;然后在shell腳本中可以隨便調用。 shell中函數的定義格式如下&#xff1a; [ function ] funname [()] { action; [return int;] } 說明&#xff1a; 1、可以帶function fun() 定義&#xff0c;也可以直接fun…

log4j:WARN No appenders could be found for logger問題

本文將idea場景下的使用。 IDEA中&#xff0c;將配置文件命名為log4j.properties&#xff08;該命名才會被自動加載&#xff09;&#xff0c; 并放到某個目錄下&#xff08;通常放到resources目錄&#xff09;&#xff0c;并在resources上右鍵&#xff0c;找到Mark Directory a…

微信程序 自定義遮罩層遮不住底部tabbar解決

一、先上效果 二 方法 1、自定義底部tabbar 實現&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 官網去抄 簡單寫下&#xff1a;在代碼根目錄下添加入口文件 除了js 文件的list 需要調整 其他原封不動 代碼&#xf…

Hadoop數據遷移distcp

Hadoop數據遷移distcp 準備工作 確認源集群&#xff08;a&#xff09;,目標集群&#xff08;b&#xff09;確認a集群的主節點和b集群的主節點確認兩個集群的網絡相通確認遷移模式&#xff08;全量遷移還是增量遷移&#xff09;&#xff0c;這里選擇全量遷移 遷移文件 遷移t…

【路由協議】使用按需路由協議和數據包注入的即時網絡模擬傳遞率(PDR)、總消耗能量和節點消耗能量以及延遲研究(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

斯坦福「小鎮」開源AI智能體;小米應用商店將要求AI應用符合資質標準

&#x1f989; AI新聞 &#x1f680; 斯坦福「小鎮」開源AI智能體 摘要:斯坦福研究人員開源了一個類似《西部世界》的數字化「小鎮」,里面有25個AI智能體可以生活、工作、社交。這項研究被視為AGI的重要開端,可能會改變游戲、企業應用領域。網友期待這項技術改善游戲NPC的交互…

PyMuPDF`庫實現PDF旋轉功能

本文介紹了一個簡單的Python應用程序&#xff0c;用于將PDF文件轉換為旋轉90度的PDF文件。主要用于csdn網站中導出的博客pdf是橫向的&#xff0c;看起來不是很方便&#xff0c;才想到用python編制一個將pdf從橫向轉為縱向的功能。 功能 該PDF轉換工具具有以下功能&#xff1a…

信息安全:防火墻技術原理與應用.

信息安全&#xff1a;防火墻技術原理與應用. 防火墻是網絡安全區域邊界保護的重要技術。為了應對網絡威脅&#xff0c;聯網的機構或公司將自己的網絡與公共的不可信任的網絡進行隔離&#xff0c;其方法是根據網絡的安全信任程度和需要保護的對象&#xff0c;人為地劃分若干安全…

C#工程建立后修改工程文件名與命名空間

使用之前的項目做二次開發&#xff0c;項目快結束的時候&#xff0c;需要把主項目的名稱修改成我們想要的。 之前從來沒有這么干過&#xff0c;記錄一下。 步驟如下&#xff1a; 1&#xff1a;打開vs2010項目解決方案&#xff0c;重命名&#xff0c;如下圖所示&#xff1a; …

SDP協議是什么,詳解SDP協議

一、SDP協議簡介 SDP&#xff08;Session Description Protocol&#xff09;是一種會話描述協議&#xff0c;用于描述多媒體會話的參數。它是一種文本協議&#xff0c;通常用于VoIP&#xff08;Voice over Internet Protocol&#xff09;和視頻會議等應用中。SDP協議定義了一種…

Vue項目(購物車)

目錄 購物車效果展示&#xff1a; 購物車代碼&#xff1a; 購物車效果展示&#xff1a; 此項目添加、修改、刪除數據的地方都寫了瀏覽器都會把它存儲起來 下次運行項目時會把瀏覽器數據拿出來并在頁面展示 Video_20230816145047 購物車代碼&#xff1a; 復制完代碼&#xff0…

leetcode每日一題_2682.找出轉圈游戲輸家

2682.找出轉圈游戲輸家 題目: n 個朋友在玩游戲。這些朋友坐成一個圈&#xff0c;按 順時針方向 從 1 到 n 編號。從第 i 個朋友的位置開始順時針移動 1 步會到達第 (i 1) 個朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而從第 n 個朋友的位置開始順時針移…

設計模式之原型模式Prototype的C++實現

1、原型模式提出 在軟件功能設計中&#xff0c;經常面臨著“某些結構復雜的對象”的創建工作&#xff0c;且創建的對象想擁有其他對象在某一刻的狀態&#xff0c;則可以使用原型模型。原型模型是通過拷貝構造函數來創建對象&#xff0c;并且該對象擁有其他對象在某一刻的狀態。…

Docker基礎入門:鏡像、容器導入導出與私有倉庫搭建

Docker基礎入門&#xff1a;鏡像導入導出與私有倉庫搭建 一、 Docker鏡像、容器的導入和導出1.1、Docker鏡像的導出1.2、Docker鏡像的載入1.3、Docker容器的導出1.4、Docker容器的導入 二、 鏡像和容器導出和導入的區別:三、commit操作_本地鏡像發布到阿里云3.1、commit操作有關…

ppt中線材相交接的地方,如何繪畫

ppt中線材相交接的地方&#xff1a; 在ppt中繪畫線材相互交接的地方&#xff1a; 1.1繪圖工具中的“弧形” 1.2小技巧 “弧形”工具點一下&#xff0c;在ppt中如下 1.3拖動活動點進行調整圖形 1.4繪畫圓弧 1.5調整“圓弧”的大小&#xff0c;鼠標放在“黃色點”位置&#xf…

【JVM】垃圾回收算法

目錄 一、判斷對象已“死” 1.1、引用計數算法 1.2、可達性分析算法 1.3、引用的概念 二、垃圾收集算法理論 2.1、分代收集理論 三、垃圾收集算法 3.1、標記--清除算法 3.2、標記--復制算法 3.3、標記--整理算法 一、判斷對象已“死” 在堆里面存放著Java世界中幾乎所…

【數據結構】二叉搜索樹

&#x1f680; 作者簡介&#xff1a;一名在后端領域學習&#xff0c;并渴望能夠學有所成的追夢人。 &#x1f40c; 個人主頁&#xff1a;蝸牛牛啊 &#x1f525; 系列專欄&#xff1a;&#x1f6f9;數據結構、&#x1f6f4;C &#x1f4d5; 學習格言&#xff1a;博觀而約取&…

億賽通電子文檔安全管理系統任意文件上傳漏洞復現

0x01 產品簡介 億賽通電子文檔安全管理系統&#xff08;簡稱&#xff1a;CDG&#xff09;是一款電子文檔安全加密軟件&#xff0c;該系統利用驅動層透明加密技術&#xff0c;通過對電子文檔的加密保護&#xff0c;防止內部員工泄密和外部人員非法竊取企業核心重要數據資產&…