日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天堂在线免费视频 | 精品一区二三区 | 少妇捆绑紧缚av | 亚洲激情视频在线 | 大地资源二中文在线影视观看 | 亚洲精品小说 | 亚洲男人的天堂网站 | 免费的毛片网站 | 日韩视频免费观看高清完整版在线观看 | 天天射天天干 | 九九久久综合 | wwww欧美| 久草中文在线观看 | 久久久久久久久久久久久久久久久久 | 国产日韩一区二区三区在线观看 | 中文字幕日韩欧美一区二区 | 男阳茎进女阳道视频大全 | 男人天堂avav | 国产伦精品一区二区三区视频我 | 1024你懂的日韩 | 成人黄色大片在线观看 | 国产在线中文字幕 | av网站在线观看免费 | 免费看黄色aaaaaa 片 | 成人午夜视频在线 | 亚洲成人777 | 少妇被狂c下部羞羞漫画 | 天天射日日 | 噜噜噜久久 | 99er精品视频 | 国产成人在线一区二区 | 欧美精品成人一区二区在线观看 | 神马影院午夜伦理片 | 孕妇毛片 | 999福利视频| 国产中出视频 | 韩国黄色一级片 | 国产奶头好大揉着好爽视频 | 欧美性欧美zzzzzzzzz | 亚洲男人在线 | xxxxwwww国产 | 免费日韩av | 国产欧美久久一区二区三区 | 中文天堂资源在线 | 少妇视频在线 | 久青草视频在线观看 | 亚洲激情啪啪 | 日韩va在线 | 8x8x最新网址| 美女操出白浆 | av无限看 | 日韩天堂在线视频 | 黄色xxxxxx | 美女打屁股网站 | www.狠狠操.com | 亚洲天堂8 | 极品销魂美女一区二区三区 | 日本免费专区 | 人妖一区| 精品美女久久久久 | 欧美日韩中文字幕视频 | 亚洲精品成人片在线观看精品字幕 | 国产欧美日韩91 | 精品深夜av无码一区二区老年 | 欧美肥老妇视频 | 欧美日韩视频在线观看免费 | 精品一区二区在线播放 | 免费看国产一级片 | 蜜桃av在线 | 伊人55| 可以免费看的av | 一级特黄aa大片欧美 | 亚洲 欧美 中文字幕 | 伊人av综合| 国产视频第一区 | 囯产精品一品二区三区 | 国产日韩欧美视频在线 | 91视频免费在观看 | 老司机伊人 | 欧美激情在线 | 日本一区中文字幕 | 青青艹在线观看 | 欧美日一本 | 亚洲国产精品综合久久久 | 色老头av| www.蜜臀| 日韩一区中文字幕 | 免费人成视频在线 | 日韩三区在线 | 午夜av片 | 床上激情网站 | 在线无码va中文字幕无码 | 亚洲精品视频观看 | 男人天堂网在线观看 | 久久久一 | 亚洲男人天堂影院 | 超碰在线a | 久久水蜜桃 | 亚洲88av|