黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 如何學習java多線程?

如何學習java多線程?

更新時間:2020-01-13 15:22:36 來源:動力節點 瀏覽2564次


  并發處理的廣泛應用是使得amdahl定律代替摩爾定律成為計算機性能發展源動力的根本原因,是人類壓榨計算機運算能力的最有力武器。


如何學習java多線程?


  并發并非一定得用多線程,多進程也可以,不過java里面談論并發,大多數與線程脫不開關系。因此我們從線程說起。本文主要包含以下內容:


  線程的實現


  線程的調度


  線程狀態切換


  線程的實現


  線程是比進程更輕量級的調度執行單位,在linux里面,線程和進程沒有什么區別,唯一的就是在地址空間,線程的切換虛擬內存空間依然是相同的,但是進程切換是不同的。


  目前主流的操作系統都提供的線程實現,java則提供的線程實現方法都是native的,因為不同的硬件和操作系統提供線程調度方式并不盡相同,所以java沒用采用和平臺無關的統一手段來實現。


  實現線程的主要3種方式:使用內核線程實現,使用用戶線程實現,使用用戶線程加輕量級進程混合實現。


  內核線程實現


  內核線程(KLT)就是直接由操作系統內核支持的線程,這種線程由內核來完成線程切換。


  程序一般不會直接使用內核線程,而是去使用內核線程的一種高級接口—輕量級進程(LWP),輕量級進程就是我們所講的線程,這種輕量級進程與內核線程之間1:1的對應關系。

如何學習java多線程?

  優點:


  內核直接支持,由操作系統內核創建和撤銷。內核維護進程及線程的上下文信息以及線程切換。一個內核線程由于I/O操作而阻塞,不會影響其它線程的運行。


  缺點:


  1、線程的操作、創建、同步等都需要系統調用,而系統調用代價比較高,需要在用戶態和內核態中來回切換。


  2、每個輕量級的進程都需要一個內核線程來支持,需要消耗一定的內核資源。


  用戶線程實現


  用戶線程指不需要內核支持而在用戶程序中實現的線程,其不依賴于操作系統核心,應用進程利用線程庫提供創建、同步、調度和管理線程的函數來控制用戶線程。


  不需要用戶態/核心態切換,速度快,操作系統內核不知道多線程的存在,因此一個線程阻塞將使得整個進程(包括它的所有線程)阻塞。使用用戶線程實現的程序一般都比較復雜,java曾經用過,不過最后還是放棄了。


  優點:


  切換由用戶態程序自己控制內核切換,不需要內核干涉,少了進出內核態的消耗。


  缺點:


  多核處理器很難講線程映射到其他處理器上,單線程阻塞會造成該進程阻塞。


  用戶線程加輕量級進程混合實現


  這種混合模式下,既存在用戶線程,也存在輕量級進程。用戶線程還是完全建立在用戶空間中,因此用戶線程的創建、切換、析構等依然廉價,可以支持大規模的用戶線程并發。


  操作系統提供支持的輕量進程作為用戶線程和內核線程之間的橋梁,用戶線程的系統調用要通過輕量級線程來完成,大大降低了進程阻塞的風險。用戶線程和輕量級進程比是N:M多對對的關系。


如何學習java多線程?


  java在jdk 1.2之前基于用戶線程實現,在1.2之后,基于操作系統的原生線程模型來實現,在每個平臺上都不盡相同,比如在windows和linux下都是采用一對一的線程模型實現,在Solaris平臺,采用都是一對一或者多對多來實現(solaris 同時支持一對一和多對多)。


  線程調度


  線程調度主要是指系統為線程分配處理器使用權的過程,主要分為:協同式線程調度和搶占式線程調度。


  協同式調度


  協同式調度中線程的執行時間由線程本身來控制,線程把自己的工作執行完成以后,主動通知系統切換到另一個線程上。像lua的“協同歷程”就是如此實現的。


  優點:


  實現簡單,線程把自己的事情干完后進行線程切換,切換操作對線程自己是可知的。無同步問題


  缺點:


  線程執行時間不可控制,如果某個線程出現問題阻塞,會造成程序阻塞。


  搶占式線程調度


  搶占式線程調度中每個線程由系統來分配執行時間,線程的切換不由線程本身來決定。


  優點:


  線程的執行時間系統可控,不會出現單個線程阻塞造成整個進程阻塞。


  java就是采用搶占式線程調度,另外,java還可以通過給線程設置優先級來建議系統給某些線程多分配一點時間,不過不是很靠譜,線程的調度最終還是取決的操作系統。


  狀態轉換


  java定義了5中線程狀態,任意一個時間點,一個線程有且只有其中一個狀態。切換如下圖:


如何學習java多線程?

  通過上面我們知道,java的線程是映射到操作系統的內核線程之上的,如果阻塞或者喚醒一個線程,都是需要操作系統來幫忙完成,這就需要從用戶態轉換到核心態中,因策狀態轉換這一步會耗費很多的處理器時間,需要謹慎使用,具體如何謹慎使用,是否有優化的余地,我們下篇再講解。


       以上就是動力節點Java培訓機構小編介紹的“ 如何學習java多線程?”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


  相關內容


  java多線程的狀態轉換以及基本操作


  常見Java多線程面試題總結


  Java多線程學習,深入解析


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 精品亚洲成a人在线播放 | 干干操| 一区二区视频在线观看免费的 | 99精品高清视频一区二区 | 久久加久久| 免费人成激情视频在线观看冫 | 韩漫画无遮挡羞免费网站 | 亚洲高清毛片 | 久久久国产精品免费 | www.狠狠插| 欧美国产成人一区二区三区 | 欧美性生活网址 | 欧美精品国产日韩综合在线 | 在线观看国产免费高清不卡 | 日本韩国欧美三级 | 成人网久久 | 免费韩国理伦片在线观看 | 香港aa三级久久三级不卡 | 国产精品手机在线亚洲 | 日本欧美大码aⅴ在线播放 日本欧美成人免费观看 | 精品亚洲一区二区 | 日本国产一区在线观看 | 99热精品一区 | 成人短视频在线观看视频 | 欧美激情在线精品三区 | 亚洲国产第一区二区三区 | 国产精品久久久久久久久久直 | 天天操天天干天天干 | 天天色天天插 | 免费国产成人 | 521a久久九九久久精品 | 欧美午夜不卡 | 一级黄色毛片视频 | 中文字幕一区二区三区 精品 | 影音先锋天堂网 | 欧美性猛交ⅹxxx乱大交按摩 | 色黄网站在线观看 | 国产精品国产 | 九九视频精品全部免费播放 | 国产精品久久天天影视 | 日韩成人在线免费视频 |