大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線(xiàn):400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) 如何學(xué)習(xí)java多線(xiàn)程?

如何學(xué)習(xí)java多線(xiàn)程?

更新時(shí)間:2020-01-13 15:22:36 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2683次


  并發(fā)處理的廣泛應(yīng)用是使得amdahl定律代替摩爾定律成為計(jì)算機(jī)性能發(fā)展源動(dòng)力的根本原因,是人類(lèi)壓榨計(jì)算機(jī)運(yùn)算能力的最有力武器。


如何學(xué)習(xí)java多線(xiàn)程?


  并發(fā)并非一定得用多線(xiàn)程,多進(jìn)程也可以,不過(guò)java里面談?wù)摬l(fā),大多數(shù)與線(xiàn)程脫不開(kāi)關(guān)系。因此我們從線(xiàn)程說(shuō)起。本文主要包含以下內(nèi)容:


  線(xiàn)程的實(shí)現(xiàn)


  線(xiàn)程的調(diào)度


  線(xiàn)程狀態(tài)切換


  線(xiàn)程的實(shí)現(xiàn)


  線(xiàn)程是比進(jìn)程更輕量級(jí)的調(diào)度執(zhí)行單位,在linux里面,線(xiàn)程和進(jìn)程沒(méi)有什么區(qū)別,唯一的就是在地址空間,線(xiàn)程的切換虛擬內(nèi)存空間依然是相同的,但是進(jìn)程切換是不同的。


  目前主流的操作系統(tǒng)都提供的線(xiàn)程實(shí)現(xiàn),java則提供的線(xiàn)程實(shí)現(xiàn)方法都是native的,因?yàn)椴煌挠布筒僮飨到y(tǒng)提供線(xiàn)程調(diào)度方式并不盡相同,所以java沒(méi)用采用和平臺(tái)無(wú)關(guān)的統(tǒng)一手段來(lái)實(shí)現(xiàn)。


  實(shí)現(xiàn)線(xiàn)程的主要3種方式:使用內(nèi)核線(xiàn)程實(shí)現(xiàn),使用用戶(hù)線(xiàn)程實(shí)現(xiàn),使用用戶(hù)線(xiàn)程加輕量級(jí)進(jìn)程混合實(shí)現(xiàn)。


  內(nèi)核線(xiàn)程實(shí)現(xiàn)


  內(nèi)核線(xiàn)程(KLT)就是直接由操作系統(tǒng)內(nèi)核支持的線(xiàn)程,這種線(xiàn)程由內(nèi)核來(lái)完成線(xiàn)程切換。


  程序一般不會(huì)直接使用內(nèi)核線(xiàn)程,而是去使用內(nèi)核線(xiàn)程的一種高級(jí)接口—輕量級(jí)進(jìn)程(LWP),輕量級(jí)進(jìn)程就是我們所講的線(xiàn)程,這種輕量級(jí)進(jìn)程與內(nèi)核線(xiàn)程之間1:1的對(duì)應(yīng)關(guān)系。

如何學(xué)習(xí)java多線(xiàn)程?

  優(yōu)點(diǎn):


  內(nèi)核直接支持,由操作系統(tǒng)內(nèi)核創(chuàng)建和撤銷(xiāo)。內(nèi)核維護(hù)進(jìn)程及線(xiàn)程的上下文信息以及線(xiàn)程切換。一個(gè)內(nèi)核線(xiàn)程由于I/O操作而阻塞,不會(huì)影響其它線(xiàn)程的運(yùn)行。


  缺點(diǎn):


  1、線(xiàn)程的操作、創(chuàng)建、同步等都需要系統(tǒng)調(diào)用,而系統(tǒng)調(diào)用代價(jià)比較高,需要在用戶(hù)態(tài)和內(nèi)核態(tài)中來(lái)回切換。


  2、每個(gè)輕量級(jí)的進(jìn)程都需要一個(gè)內(nèi)核線(xiàn)程來(lái)支持,需要消耗一定的內(nèi)核資源。


  用戶(hù)線(xiàn)程實(shí)現(xiàn)


  用戶(hù)線(xiàn)程指不需要內(nèi)核支持而在用戶(hù)程序中實(shí)現(xiàn)的線(xiàn)程,其不依賴(lài)于操作系統(tǒng)核心,應(yīng)用進(jìn)程利用線(xiàn)程庫(kù)提供創(chuàng)建、同步、調(diào)度和管理線(xiàn)程的函數(shù)來(lái)控制用戶(hù)線(xiàn)程。


  不需要用戶(hù)態(tài)/核心態(tài)切換,速度快,操作系統(tǒng)內(nèi)核不知道多線(xiàn)程的存在,因此一個(gè)線(xiàn)程阻塞將使得整個(gè)進(jìn)程(包括它的所有線(xiàn)程)阻塞。使用用戶(hù)線(xiàn)程實(shí)現(xiàn)的程序一般都比較復(fù)雜,java曾經(jīng)用過(guò),不過(guò)最后還是放棄了。


  優(yōu)點(diǎn):


  切換由用戶(hù)態(tài)程序自己控制內(nèi)核切換,不需要內(nèi)核干涉,少了進(jìn)出內(nèi)核態(tài)的消耗。


  缺點(diǎn):


  多核處理器很難講線(xiàn)程映射到其他處理器上,單線(xiàn)程阻塞會(huì)造成該進(jìn)程阻塞。


  用戶(hù)線(xiàn)程加輕量級(jí)進(jìn)程混合實(shí)現(xiàn)


  這種混合模式下,既存在用戶(hù)線(xiàn)程,也存在輕量級(jí)進(jìn)程。用戶(hù)線(xiàn)程還是完全建立在用戶(hù)空間中,因此用戶(hù)線(xiàn)程的創(chuàng)建、切換、析構(gòu)等依然廉價(jià),可以支持大規(guī)模的用戶(hù)線(xiàn)程并發(fā)。


  操作系統(tǒng)提供支持的輕量進(jìn)程作為用戶(hù)線(xiàn)程和內(nèi)核線(xiàn)程之間的橋梁,用戶(hù)線(xiàn)程的系統(tǒng)調(diào)用要通過(guò)輕量級(jí)線(xiàn)程來(lái)完成,大大降低了進(jìn)程阻塞的風(fēng)險(xiǎn)。用戶(hù)線(xiàn)程和輕量級(jí)進(jìn)程比是N:M多對(duì)對(duì)的關(guān)系。


如何學(xué)習(xí)java多線(xiàn)程?


  java在jdk 1.2之前基于用戶(hù)線(xiàn)程實(shí)現(xiàn),在1.2之后,基于操作系統(tǒng)的原生線(xiàn)程模型來(lái)實(shí)現(xiàn),在每個(gè)平臺(tái)上都不盡相同,比如在windows和linux下都是采用一對(duì)一的線(xiàn)程模型實(shí)現(xiàn),在Solaris平臺(tái),采用都是一對(duì)一或者多對(duì)多來(lái)實(shí)現(xiàn)(solaris 同時(shí)支持一對(duì)一和多對(duì)多)。


  線(xiàn)程調(diào)度


  線(xiàn)程調(diào)度主要是指系統(tǒng)為線(xiàn)程分配處理器使用權(quán)的過(guò)程,主要分為:協(xié)同式線(xiàn)程調(diào)度和搶占式線(xiàn)程調(diào)度。


  協(xié)同式調(diào)度


  協(xié)同式調(diào)度中線(xiàn)程的執(zhí)行時(shí)間由線(xiàn)程本身來(lái)控制,線(xiàn)程把自己的工作執(zhí)行完成以后,主動(dòng)通知系統(tǒng)切換到另一個(gè)線(xiàn)程上。像lua的“協(xié)同歷程”就是如此實(shí)現(xiàn)的。


  優(yōu)點(diǎn):


  實(shí)現(xiàn)簡(jiǎn)單,線(xiàn)程把自己的事情干完后進(jìn)行線(xiàn)程切換,切換操作對(duì)線(xiàn)程自己是可知的。無(wú)同步問(wèn)題


  缺點(diǎn):


  線(xiàn)程執(zhí)行時(shí)間不可控制,如果某個(gè)線(xiàn)程出現(xiàn)問(wèn)題阻塞,會(huì)造成程序阻塞。


  搶占式線(xiàn)程調(diào)度


  搶占式線(xiàn)程調(diào)度中每個(gè)線(xiàn)程由系統(tǒng)來(lái)分配執(zhí)行時(shí)間,線(xiàn)程的切換不由線(xiàn)程本身來(lái)決定。


  優(yōu)點(diǎn):


  線(xiàn)程的執(zhí)行時(shí)間系統(tǒng)可控,不會(huì)出現(xiàn)單個(gè)線(xiàn)程阻塞造成整個(gè)進(jìn)程阻塞。


  java就是采用搶占式線(xiàn)程調(diào)度,另外,java還可以通過(guò)給線(xiàn)程設(shè)置優(yōu)先級(jí)來(lái)建議系統(tǒng)給某些線(xiàn)程多分配一點(diǎn)時(shí)間,不過(guò)不是很靠譜,線(xiàn)程的調(diào)度最終還是取決的操作系統(tǒng)。


  狀態(tài)轉(zhuǎn)換


  java定義了5中線(xiàn)程狀態(tài),任意一個(gè)時(shí)間點(diǎn),一個(gè)線(xiàn)程有且只有其中一個(gè)狀態(tài)。切換如下圖:


如何學(xué)習(xí)java多線(xiàn)程?

  通過(guò)上面我們知道,java的線(xiàn)程是映射到操作系統(tǒng)的內(nèi)核線(xiàn)程之上的,如果阻塞或者喚醒一個(gè)線(xiàn)程,都是需要操作系統(tǒng)來(lái)幫忙完成,這就需要從用戶(hù)態(tài)轉(zhuǎn)換到核心態(tài)中,因策狀態(tài)轉(zhuǎn)換這一步會(huì)耗費(fèi)很多的處理器時(shí)間,需要謹(jǐn)慎使用,具體如何謹(jǐn)慎使用,是否有優(yōu)化的余地,我們下篇再講解。


       以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“ 如何學(xué)習(xí)java多線(xiàn)程?”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。


  相關(guān)內(nèi)容


  java多線(xiàn)程的狀態(tài)轉(zhuǎn)換以及基本操作


  常見(jiàn)Java多線(xiàn)程面試題總結(jié)


  Java多線(xiàn)程學(xué)習(xí),深入解析


提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 在线欧美v日韩v国产精品v | 久久免视频 | 中文精品视频一区二区在线观看 | 国产精品无码久久综合网 | 新香蕉视频在线 | 久久99青青久久99久久 | 免费爽视频| 在线精品亚洲欧洲第一页 | 鲁一鲁中文字幕久久 | 天色噜噜噜噜 | 欧美激情一区二区三区视频 | 日本一级片免费观看 | 九九热亚洲精品综合视频 | 操操网站 | 精品日韩在线观看 | 久久精品入口麻豆 | 91精品免费观看老司机 | 成人aaaa | 日本亚洲高清 | 欧美一级爱爱 | 欧美xxxx狂喷水喷水 | 久久久国产99久久国产首页 | 二级毛片免费观看全程 | 九九免费观看全部免费视频 | 国产精品免费一区二区三区四区 | 精品国产一区二区三区久久 | 日韩天天干| 成人午夜啪啪免费网站 | 九九热精品在线观看 | 天天干视频 | 亚洲我射| 狼人射综合 | 欧美成人aa大片拍拍拍 | 中文字幕高清免费不卡视频 | 一级毛片免费观看久 | 四虎免费永久观看 | 青青国产成人久久91网站站 | 最新国产精品亚洲二区 | 久草婷婷在线 | 日本成人tv | 亚洲欧美日韩在线观看你懂的 |