Java架構師教你如何突破瓶頸,持續更新中

1、上下文切換

上下文定義

cpu發生進程或者線程切換時,所依賴的數據集合,比如一個函數有外部變量,函數運行時,必須獲取外部變量,這些變量值的集合就是上下文。

引發問題

對于CPU密集型任務,多線程處理會發生上下文切換,會影響到執行速度,如果時IO密集型,多線程技術優點盡顯。

如何減少上下文切換

  • 無鎖并發編程,鎖的獲取與釋放會發生上下文切換,多線程時會影響效率。無鎖并發編程就是將數據分塊,每個線程處理各自模塊。比如LongAdder中部分代碼。
  • CAS算法,并發編程時通過CAS算法更新數據,而不必加鎖。如Java的atomic包下的工具類。
  • 使用最少線程,減少不必要的線程創建,自定義線程池。
  • 使用協程,在單線程中維護多任務調度,處理任務間切換,Golang對于協程的使用很強大。

2、死鎖

死鎖定義

死鎖是進程死鎖的簡稱,是由Dijkstra于1965年研究銀行家算法時首先提出來的。
系統發生死鎖現象不僅浪費大量的系統資源,甚至導致整個系統崩潰,帶來災難性后果。

產生死鎖原因

  • 系統資源不足
  • 進程推進順序不當
  • 資源分配不合理

死鎖產生的必要條件

  • 互斥條件:一個資源只能被一個進程或者線程使用。
  • 請求和保持條件:一個進程或者線程,請求資源的時候發生阻塞,對已經獲取的資源保持不放。
  • 不可剝奪條件:進程或者線程以獲得的資源,在未使用完成時,不能強行剝奪。
  • 循環等待條件:若干進程或者線程形成一種頭尾相接的循環等待的資源關系。

這四分條件是死鎖產生的必要條件,只要發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

如何避免死鎖

  1. 以確定的順序獲得鎖
  2. 加鎖時限

Lock接口提供了boolean tryLock(long time, TimeUnit unit) throws InterruptedException方法,該方法可以按照固定時長等待鎖,因此線程可以在獲取鎖超時以后,主動釋放之前已經獲得的所有的鎖。

總結

我們總是喜歡瞻仰大廠的大神們,但實際上大神也不過凡人,與菜鳥程序員相比,也就多花了幾分心思,如果你再不努力,差距也只會越來越大。實際上,作為程序員,豐富自己的知識儲備,提升自己的知識深度和廣度是很有必要的。

送大家一份資料,戳這里免費領取

Mybatis源碼解析

Mybatis源碼解析

[外鏈圖片轉存中…(img-NEmrPvqX-1624875942009)]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385836.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385836.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385836.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matlab dwt 多層分解,利用matlab對圖片進行多層小波分解 會的加QQ511607771 加過作圖之后積分加倍送...

利用matlab對圖片進行多層小波分解 會的加QQ511607771 加過作圖之后積分加倍送mip版 關注:96 答案:2 懸賞:0解決時間 2021-01-23 13:02已解決2021-01-23 04:23(Haar小波、Daubechies小波、Coiflets小波和Symlets小波) 三層分解下的去噪圖可以直接發信息15836900853 立馬上線…

Java校招面試經驗匯總,最終入職阿里

一面 自我介紹項目中的監控:那個監控指標常見的有哪些?微服務涉及到的技術以及需要注意的問題有哪些?注冊中心你了解了哪些?consul 的可靠性你了解嗎?consul 的機制你有沒有具體深入過?有沒有和其他的注冊…

matlab確定位置,Hurlin 的PSTR模型包,怎樣確定位置參數個數

http://www.runmycode.org/companion/view/2564我用的是這個包1.怎樣確定位置參數個數?2. 門限變量也是解釋變量時,結果中(結果如下)的warning 是什么意思?3. 這個包中是否能夠把門限變量也作為解釋變量?我跑出的結果是這樣的&…

Java校招面試經驗匯總,看完直接跪服

美團技術一面20分鐘 晚7點,因為想到下周一才面試,我剛準備出去打個羽毛球,北京的電話就來了。面試官各種抱歉,說開會拖延了。 1、自我介紹 說了很多遍了,很流暢撿重點介紹完。 2、問我數據結構算法好不好 挺好的&…

nginx alias php 404,Nginx配置靜態服務器以及404問題解決,root和alias的區別

最近在使用Nginx配置一個圖片靜態服務器來通過http請求訪問圖片,在配置的時候,發現遇到訪問有404的問題,結果發現是在配置路徑的時候,和路徑屬性是root還是alias的有關。nginx配置文件server {listen 88;server_name localhost;#c…

Java框架體系架構的知識,輕松拿下offer

算法 ?道常?的字符串算法題總結最?公共前綴回?串兩數相加翻轉鏈表鏈表中倒數第k個節點刪除鏈表的倒數第N個節點合并兩個排序的鏈表劍指offer部分編程題跳臺階問題變態跳臺階問題?維數組查找替換空格題?描述:數值的整數次?調整數組順序使奇數位于偶數前?鏈表…

php函數網,php函數

時間相關1.time(),可獲得當前時間的時間戳.2.strtotime(),可將一個文本類型的datetime轉化成時間戳.3.格式輸出:比如輸出時間為01/31/2011date(m/d/Y,時間戳).再如: date ( Y-m-d H:i:s , 時間戳 ); 2011-01-31 04:20:59.輸入輸出相關echo sprintf("%.2f",0.24236); …

java開發學生管理系統,看這篇足矣了!

20道常見MySQL數據庫面試題解析 事務四大特性(ACID)原子性、一致性、隔離性、持久性? 事務的并發?事務隔離級別,每個級別會引發什么問題,MySQL默認是哪個級別? MySQL常見的三種存儲引擎&#…

oracle頻,Oracle動作頻頻 Java或浴火重生

【51CTO觀察】自從今年(2010)的1月27日Oracle正式宣布完成并購Sun以來,Java的前途和命運一直是眾多Java開發者的所關心的話題。4月9日,被稱為Java之父的James Gosling又在個人博客上宣布離開Oracle,這一事件更為Java的前景增加了一層迷霧。但…

java開發實戰經典第二版百度網盤,靈魂拷問

一面(一個小時左右) 算法:寫冒泡排序,問如何優化,簡單講了快排和堆排序的原理數據庫:解釋左連接數據庫第一第二第三范式,數據庫死鎖linux:怎么查看內存;怎么查看進程&am…

php用戶之間的數據,什么是位于用戶與操作系統之間的一層數據管理軟件

什么是位于用戶與操作系統之間的一層數據管理軟件?DBMS是位于用戶與操作系統之間的一層數據管理軟件。數據庫管理系統(Database Management System)是一種操縱和管理數據庫的大型軟件,用于建立、使用和維護數據庫,簡稱DBMS。它對數據庫進行統…

java開發實戰經典答案百度云,含面試題+答案

1、上下文切換 上下文定義 cpu發生進程或者線程切換時,所依賴的數據集合,比如一個函數有外部變量,函數運行時,必須獲取外部變量,這些變量值的集合就是上下文。 引發問題 對于CPU密集型任務,多線程處理會…

redius和oracle怎么配置,求個 交換機radius 詳細配置案例

配置采用RADIUS協議進行認證和計費示例組網需求如圖1所示,用戶通過SwitchA訪問網絡,用戶同處于huawei域。SwitchB作為目的網絡接入服務器。用戶首先需要穿越SwitchA和SwitchB所在的網絡,然后通過服務器的遠端認證才能通過SwitchB訪問目的網絡…

java開發小程序好嗎,看完必懂

1關于MySQL,面試官會問哪些問題? 第一個:MySQ性能優化最佳實踐21個(有具體的解釋)你知道哪些? 為查詢緩存優化你的查詢 EXPLAIN你的SELECT查詢 當只要一行數據時使用LIMIT 1 為搜索字段建索引 在Join表…

linux拉取指定時間內,Linux 日期和時間操作詳解

Linux將時鐘分為系統時鐘(System Clock)和硬件(Real Time Clock,簡稱RTC)時鐘兩種。系統時間是指當前Linux Kernel中的時鐘,而硬件時鐘則是主板上由電池供電的那個主板硬件時鐘,當Linux啟動時,硬件時鐘會去讀取系統時鐘的設置,然后…

java開發屬于后端嗎,值得一讀!

1. 垃圾回收機制 Stop-the-World:   JVM由于要執行GC而停止了應用程序的執行稱之為Stop-the-World,該情形會在任何一種GC算法中發生。當Stop-the-world發生時,除了GC所需的線程以外,所有線程都處于等待狀態直到GC任務完成。事實…

linux 創建精靈進程,linux 進程通信之 守護進程

守護進程(Daemon)Daemon(精靈)進程,是linux中的后臺服務進程,通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的時間。一般采用以d結尾的名字。從下面的進程信息可以看出,守護進程都是【?】。colord 1160 0.0 0.2 …

java開發崗位招聘,吊打面試官

一.java基礎面試知識點 java中和equals和hashCode的區別 int、char、long各占多少字節數 int與integer的區別 探探對java多態的理解 String、StringBuffer、StringBuilder區別 什么是內部類?內部類的作用 抽象類和接口區別 抽象類的意義 抽象類與接口的應用…

linux 調用默認程序打開文件,Excel VBA如何使用默認應用程序打開文件

我無法評論現有答案(分數不足),因此我在回答以添加信息。從Access 2010開始,我遇到了以下語法的無提示故障:Dim URL As StringURL "http://foo.com/"CreateObject("Shell.Application").Open URL如果用URL括號括起來&am…

java開發工作找不到要放棄嗎,年薪50W

1. Redis面試專題 絕大部分寫業務的程序員,在實際開發中使用 Redis 的時候,只會 Set Value 和 Get Value 兩個操作,對 Redis 整體缺乏一個認知。這里以面試題的形式對 Redis 常見問題做一個總結,解決大家的知識盲點。 什么是Red…