日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

【Java 并发编程】线程池机制 ( 测试线程开销 | 启动线程分析 | 用户态 | 内核态 | 用户线程 | 内核线程 | 轻量级进程 )

發(fā)布時(shí)間:2025/6/17 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java 并发编程】线程池机制 ( 测试线程开销 | 启动线程分析 | 用户态 | 内核态 | 用户线程 | 内核线程 | 轻量级进程 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、測(cè)試線程開銷
    • 1、正常測(cè)試
    • 2、不創(chuàng)建線程
    • 3、只創(chuàng)建不啟動(dòng)線程
    • 4、只啟動(dòng)不等待執(zhí)行完成
  • 二、分析測(cè)試結(jié)果
    • 1、啟動(dòng)線程分析
    • 2、用戶線程與內(nèi)核線程
    • 3、輕量級(jí)進(jìn)程
    • 4、驗(yàn)證 Java 線程類型





一、測(cè)試線程開銷



線程池是線程的緩存 , 在 Java 高并發(fā)場(chǎng)景中 , 所有的異步操作 , 都可以使用線程池 ;

使用線程池時(shí) , 不建議用在 " 執(zhí)行耗時(shí)較長(zhǎng)的操作 " 的業(yè)務(wù)場(chǎng)景中 ;

線程池機(jī)制 最重要的功能就是 復(fù)用線程 ; 線程的創(chuàng)建 , 銷毀 , 都是要消耗資源的 , 如果頻繁創(chuàng)建銷毀線程 , 會(huì)消耗很多資源 ;


1、正常測(cè)試


下面開始測(cè)試一下線程創(chuàng)建的開銷 :

在主線程中 , 啟動(dòng) 101010 萬(wàn)個(gè)線程 , 每個(gè)線程中累加 count 變量 ;

public class Main {/*** 線程中對(duì)該值進(jìn)行累加操作*/private static int count = 0;public static void main(String[] args) throws InterruptedException {// 記錄程序開始執(zhí)行時(shí)間long startTime = System.currentTimeMillis();// 創(chuàng)建 10 萬(wàn)個(gè)線程, 開啟線程后, 向集合中添加一個(gè)元素for (int i = 0; i < 100000; i ++) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {count ++;}});// 啟動(dòng)線程thread.start();// 等待線程執(zhí)行完成thread.join();}// 記錄程序執(zhí)行結(jié)束時(shí)間long endTime = System.currentTimeMillis();// 打印消耗的時(shí)間System.out.println("耗時(shí) : " + ( endTime - startTime ) + " ms , 最終 count = " + count);} }

執(zhí)行結(jié)果 : 101010 萬(wàn)個(gè)線程執(zhí)行完畢消耗 10.99210.99210.992 秒 ;


2、不創(chuàng)建線程


注釋掉線程相關(guān)代碼 :

public class Main {/*** 線程中對(duì)該值進(jìn)行累加操作*/private static int count = 0;public static void main(String[] args) throws InterruptedException {// 記錄程序開始執(zhí)行時(shí)間long startTime = System.currentTimeMillis();// 創(chuàng)建 10 萬(wàn)個(gè)線程, 開啟線程后, 向集合中添加一個(gè)元素for (int i = 0; i < 100000; i ++) {/*Thread thread = new Thread(new Runnable() {@Overridepublic void run() {count ++;}});// 啟動(dòng)線程thread.start();// 等待線程執(zhí)行完成thread.join();*/}// 記錄程序執(zhí)行結(jié)束時(shí)間long endTime = System.currentTimeMillis();// 打印消耗的時(shí)間System.out.println("耗時(shí) : " + ( endTime - startTime ) + " ms , 最終 count = " + count);} }

執(zhí)行結(jié)果 : 111 ms 執(zhí)行完畢 ; 說(shuō)明耗時(shí)操作是在 for 循環(huán)中 ;


3、只創(chuàng)建不啟動(dòng)線程


注釋掉線程啟動(dòng)代碼 :

public class Main {/*** 線程中對(duì)該值進(jìn)行累加操作*/private static int count = 0;public static void main(String[] args) throws InterruptedException {// 記錄程序開始執(zhí)行時(shí)間long startTime = System.currentTimeMillis();// 創(chuàng)建 10 萬(wàn)個(gè)線程, 開啟線程后, 向集合中添加一個(gè)元素for (int i = 0; i < 100000; i ++) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {count ++;}});/*// 啟動(dòng)線程thread.start();// 等待線程執(zhí)行完成thread.join();*/}// 記錄程序執(zhí)行結(jié)束時(shí)間long endTime = System.currentTimeMillis();// 打印消耗的時(shí)間System.out.println("耗時(shí) : " + ( endTime - startTime ) + " ms , 最終 count = " + count);} }

執(zhí)行結(jié)果 : 耗時(shí) 797979 ms , 也很快 , 大部分時(shí)間都在 啟動(dòng) 與 等待線程執(zhí)行完畢消耗 ;


4、只啟動(dòng)不等待執(zhí)行完成


注釋掉等待線程執(zhí)行完成代碼 :

public class Main {/*** 線程中對(duì)該值進(jìn)行累加操作*/private static int count = 0;public static void main(String[] args) throws InterruptedException {// 記錄程序開始執(zhí)行時(shí)間long startTime = System.currentTimeMillis();// 創(chuàng)建 10 萬(wàn)個(gè)線程, 開啟線程后, 向集合中添加一個(gè)元素for (int i = 0; i < 100000; i ++) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {count ++;}});// 啟動(dòng)線程thread.start();// 等待線程執(zhí)行完成//thread.join();}// 記錄程序執(zhí)行結(jié)束時(shí)間long endTime = System.currentTimeMillis();// 打印消耗的時(shí)間System.out.println("耗時(shí) : " + ( endTime - startTime ) + " ms , 最終 count = " + count);} }

執(zhí)行結(jié)果 : 耗時(shí) 3.8663.8663.866 秒 ;





二、分析測(cè)試結(jié)果




1、啟動(dòng)線程分析


在上述測(cè)試中 , 如果只是創(chuàng)建 101010 萬(wàn)個(gè) Thread 對(duì)象 , 這些在 Java 中就是普通的對(duì)象 ;

但是如果調(diào)用了 Thread 對(duì)象的 start() 方法 , 就要涉及到系統(tǒng)的線程切換 , 這個(gè)操作非常耗時(shí) ;


操作系統(tǒng)的空間 , 分為 用戶空間內(nèi)核空間 ;

用戶空間中 , 有多個(gè)進(jìn)程 , 每個(gè)進(jìn)程有多個(gè)線程 , 每個(gè)進(jìn)程都有一個(gè) 線程表 , 用于保存該進(jìn)程中的線程 ;

JVM 創(chuàng)建的線程是 內(nèi)核線程 ;

執(zhí)行 main 函數(shù)時(shí) , 處于 用戶態(tài) , 一旦調(diào)用了 start() 方法啟動(dòng)了線程 , 此時(shí)就進(jìn)入了 內(nèi)核態(tài) , 該狀態(tài)切換消耗巨大 ;


2、用戶線程與內(nèi)核線程


系統(tǒng)的線程分為 用戶線程 和 內(nèi)核線程 ;

用戶線程 : 用戶線程是 用戶程序?qū)崿F(xiàn)的線程 , 并負(fù)責(zé)管理線程的 創(chuàng)建 , 執(zhí)行 , 調(diào)度 , 同步 ;

  • 線程阻塞時(shí) , 進(jìn)程也會(huì)阻塞 ;

( Java 沒(méi)有用到用戶線程 )


內(nèi)核線程 : 內(nèi)核線程是 由內(nèi)核管理的線程 , 其內(nèi)部保存了線程的狀態(tài)信息 , 上下文信息 , 如果頻繁的切換線程 , 需要反復(fù)處理狀態(tài)信息 , 上下文信息 , 會(huì)浪費(fèi)很多資源 ;

  • 線程阻塞時(shí) , 進(jìn)程不會(huì)阻塞 ;
  • 內(nèi)核線程效率比用戶線程低 , 比進(jìn)程高 ;


3、輕量級(jí)進(jìn)程


輕量級(jí)進(jìn)程 : 在我們寫的程序中 , 雖然使用了內(nèi)核線程 , 但 沒(méi)有直接使用 , 而是 通過(guò)內(nèi)核線程的高級(jí)接口使用內(nèi)核線程 , 這個(gè)高級(jí)接口就是 " 輕量級(jí)進(jìn)程 " , Java 程序中的 Thread 就是輕量級(jí)進(jìn)程 , 每個(gè) 輕量級(jí)進(jìn)程 都對(duì)應(yīng)一個(gè) 內(nèi)核線程 ;


4、驗(yàn)證 Java 線程類型


在任務(wù)管理器中可以查看線程數(shù) :

執(zhí)行下面的程序 : 創(chuàng)建了 100001000010000 個(gè)線程

public class Test {public static void main(String[] args) {for (int i = 0; i < 10000; i ++){new Thread(()->{try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}}).start();}} }

創(chuàng)建 100001000010000 線程后 , 發(fā)現(xiàn)線程數(shù)增加了 100001000010000 ;

由此可見 , Java 虛擬機(jī)創(chuàng)建的線程是內(nèi)核線程 ;


Java 虛擬機(jī)創(chuàng)建線程 , 依賴于系統(tǒng)內(nèi)核 , 內(nèi)核空間的內(nèi)核線程 與 用戶空間的 Java 線程 是一一對(duì)應(yīng)的關(guān)系 ;

總結(jié)

以上是生活随笔為你收集整理的【Java 并发编程】线程池机制 ( 测试线程开销 | 启动线程分析 | 用户态 | 内核态 | 用户线程 | 内核线程 | 轻量级进程 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97人妻精品一区二区三区动漫 | 99精品久久99久久久久 | 小早川怜子一区二区三区 | 在线播放91灌醉迷j高跟美女 | 97精品国产97久久久久久免费 | 强videoshd酒醉| 欧美影院一区二区三区 | 成人av电影在线播放 | 欧美成人午夜精品久久久 | 国产在线视频一区二区 | 欧美一二三区 | 女人17片毛片60分钟 | 涩涩视频在线免费看 | 日本国产一区二区三区 | 人妖天堂狠狠ts人妖天堂狠狠 | 视频免费在线观看 | 美女被变态侵犯 | 91操视频| 99精品一区二区三区 | 久久久久女人精品毛片九一 | 国产欧美在线播放 | 91免费高清视频 | 日韩中文字幕2019 | 成人免费视频a | 91极品尤物 | 四虎影视免费永久观看在线 | 最新中文字幕在线观看 | ass极品水嫩小美女ass | 国产一区二区三区四区精 | 日韩孕交 | 日日草视频| 日本在线一本 | 中国极品少妇xxxx | 制服丝袜手机在线 | 成人一区二区在线观看 | 欧美三级视频网站 | 窝窝午夜视频 | 久久不卡影院 | 韩国91视频 | 男男做性免费视频网 | 免费国产视频在线观看 | 欧美极品少妇xxxxⅹ裸体艺术 | 五月网 | 久久成人精品视频 | 国产精品极品白嫩 | 6996电视影片免费看 | 国产精品调教视频 | 亚洲激情专区 | av在线资源站 | 久久精品观看 | 欧美日本国产 | 国产又色又爽又黄的 | 国产精品一区二区黑人巨大 | 欧美色拍 | 日本一区精品视频 | 亚洲一级无毛 | 99久久久无码国产精品衣服 | 国产精品美乳在线观看 | 欧美一区二区网站 | 天堂久久久久久 | 国产欧美一区二区三区在线 | 福利国产片 | 已满十八岁免费观看 | 精品国产av一区二区三区 | 国产稀缺真实呦乱在线 | 超碰997 | 北京少妇xxxx做受 | 国产日韩视频一区 | 黄色片免费 | 在线成人福利 | 羞视频在线观看 | 国产又粗又猛又爽又黄又 | 亚洲一区二区三区在线 | 国内精品卡一卡二卡三 | 国产吃瓜黑料一区二区 | 超碰人人搞| 精品国产免费观看 | 99久久久无码国产精品免费麻豆 | 国产青青视频 | 最新免费黄色网址 | 精品无码一区二区三区的天堂 | 亚洲精品www久久久 一级aaa毛片 | 国产毛片毛片毛片毛片毛片毛片 | 免费看日产一区二区三区 | www亚洲| 亚洲国产精选 | 日本女优在线看 | 黄色a级大片 | 亚洲国产精品suv | 亚洲精品乱码久久久久久按摩观 | 免费无毒av| 精品无码人妻一区二区三区 | 欧美第一网站 | 双性受孕h堵精大肚生子 | 免费黄色的网站 | 中文字幕日韩欧美在线 | 久草中文视频 | 玖玖综合网 | 一二三不卡 |