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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java高級程序員必備的內容知識

Java高級程序員必備的內容知識

更新時間:2019-12-26 09:52:06 來源:動力節點 瀏覽3748次

一段時間沒有回顧多線程相關知識了,雖然工作中會用到一些多線程的內容,但都偏向于基礎,今天重讀多線程相關內容,發現有些東西還是需要注意下。這些一般是面試高頻問題奧。

  了解并發的內幕是一個高級程序員不可缺少的課程

  Java內存模型

  注意,Java內存模型(JMM)和JVM運行時數據區不是同一個概念,還有一個概念是Java對象模型下次可以單獨拿出來說。

  JMM都是圍繞著原子性,可見性,有序性來講的

  JMM定義了JVM如何與計算機的內存進行交互

  線程對變量的所有操作都需要在工作內存中完成,不可直接操作主內存。

Java高級程序員必備的內容知識

  內存間的交互操作:

  • Lock,Unlock 主內存
  • Read,Write 主內存
  • Load,Store 工作內存的變量
  • Use,Assign 工作內存的變量

  Volatile

  Volatile可以說是Java虛擬機內提供的最輕量級同步機制,其只保證,可見性與有序性,不保證原子性。

  可見性:當一條線程修改了這個變量的值,新值對于其他線程來說是可以立刻得知的,另外兩個可以實現可見性的關鍵字:Synchronized和final

  有序性:如果再本線程內觀察,所有的操作都是有序的,如果再一個線程中觀察另外一個線程,那么所有的操作都是無序的。

  Java與線程

  并發不一定依賴多線程,如PHP中常見的多進程并發。Java的Thread類所有關鍵方法都是聲明為Native的,所以Java并沒有自己實現線程。

  實現線程的三種方式:使用內核線程實現,使用用戶線程實現,和使用用戶線程加更加輕量級進程實現。

  內核線程實現(KLT,Kernel-Level Thread)。程序一般不會直接使用內核線程,而是使用內核線程的一種高級接口,輕量級進程(LWP,Light Weight Process,LWP),先有內核線程,才能有輕量級進程。

  缺點:各種線程操作,如創建,析構,及同步需要進行系統調用,而系統調用的代價比較高,需要在用戶態和內核態中來回切換。消耗內核資源,一個系統支持輕量級的進程數量是有限制的。

  用戶線程實現,廣義上說,一個線程只要不是內核線程,那就可以任務是用戶線程。用戶線程完全在用戶態完成,不用內核的幫助,可以支持更大的線程數量。

  缺點:沒有內核支持,各種操作都比較復雜。現在基本棄用了。

  用戶線程 + 輕量級進程,綜合兩者的有點,用戶進程與輕量級進程數量比是不定的。

  線程調度

  協同式調度:好處是實現簡單,切換操作對線程自己是可知的,沒有線程同步的問題,線程把自己的事情干完之后才進行線程切換。

  缺點:如果程序編寫不穩定,那么系統不可控制。一個進程堅持不讓出CPU執行實現,就會導致系統崩潰。

  搶占式調度(Java默認調度):每個線程由系統來分配執行和弦,線程的切換不由線程來決定,當一個進程出現問題,系統可以殺掉這個進程。

  注意:并不是線程的優先級越高,線程就一定會優先執行,只是說優先級高的線程更可能被選擇到。

  Java線程狀態轉換

  貼一張圖,好好記:

Java高級程序員必備的內容知識

  線程安全的實現方法

  互斥同步,加鎖,悲觀方案,保證共享數據同一時刻只有一個線程訪問。,互斥是因,同步是果。

  非阻塞同步,CAS,樂觀方案,先進行操作,如果沒有其他線程也進行操作,那么就操作成功了,如果有其它線程也在操作共享數據,那么再重試。

  無同步方案,一般為純代碼,有一些特性,如不依賴堆上的公用系統資源

  鎖優化

  自旋鎖與自適應自旋

  假如共享數據只會持續很短的一段時間,為了這段時間進行掛起和恢復線程并不值得,這時我們可以讓后面請求鎖的線程稍等一下,讓線程進行一個忙循環(自旋),這就是所謂的自旋鎖。

  因為們有時不值得共享數據到底被鎖了多久,盲目的自旋可能導致性能的損失,JDK1.6之后,系統引入了自適應的自旋,及在一次共享數據被鎖定時,加入系統多次獲得自旋鎖,系統可以允許線程自旋的次數更多時間更久一些。如果多次沒有獲得自旋鎖,那么系統下次可能會省略掉自旋鎖。

  鎖消除

  對一些不可能存在共享數據競爭的鎖進行消除。

  鎖粗化

  有時候多個操作都對同一個對象加鎖,頻繁的加鎖也會影響性能,那么系統就把鎖的同步范圍進行擴展。如StringBuffer()的多個append操作。

  偏向鎖

  可以理解為偏袒鎖,鎖會偏向于第一個獲得它的線程,如果接下來的執行過程中,該鎖沒有被其他線程獲取,則持有偏向鎖的線程將永遠不在需要進行同步。

Java高級程序員必備的內容知識

       以上就是動力節點Java培訓機構小編介紹的“Java高級程序員必備的內容知識”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

       Java全套自學資料+視頻

       Java自學視頻教程(免費學習):http://www.dabaquan.cn/video.html

  Java技術教程:http://www.dabaquan.cn/tutorial/

  相關內容

  Java程序員如何做到Java架構師

  2019Java程序員技術面試總結

  Java多線程學習,深入解析

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 在线看日本a毛片 | 91精品刘玥在线播放 | 99久久精品免费观看国产 | 网站黄色在线观看 | 欧美一区二区三区在线播放 | 国产激情| 日韩午夜片 | 国产成人精品一区二三区 | 一级一毛片a级毛片 | 国产精亚洲视频 | 日韩午夜在线视频 | 国产成人啪精品 | 欧美日韩国产高清一区二区三区 | 91在线精品视频 | www.天天干 | 午夜在线播放 | 手机在线看片福利 | 高清在线一区二区三区亚洲综合 | 奇米777四色影视在线看 | 亚洲波多野结衣日韩在线 | 91精品久久久久久久久久小网站 | 亚洲精品一| 精品看片| 成人短视频在线观看 | 国内精品一区二区2021在线 | 久久久噜久噜久久综合 | www.一级毛片| 欧美国产亚洲一区二区三区 | 精品国产品香蕉在线观看 | 亚洲性大片 | 99精品久久99久久久久久 | 美女超逼 | 欧美一级毛片生活片 | 性欧美xo视频在线观看 | 毛片大片| 伊人不卡久久大香线蕉综合影院 | 色综合a怡红院怡红院首页 色综合h | 性欧美精品久久久久久久 | 欧美激情精品久久久久 | 欧美一级毛片国产一级毛片 | 亚洲波多野结衣日韩在线 |