原创 JMM的主內存和工作內存指的是什麼?

主內存:其實就是JAVA堆內存,裏面存放着程序中所有的類實例對象等變量,屬於線程共享的。 工作內存:工作內存存放的是線程從主內存中拷貝過來的變量副本以及訪問方法所得到的局部變量,是線程私有的。 總結 所以當線程操作某個對象的時

原创 什麼是系統進程和用戶進程?

系統進程:用於完成操作系統的各種功能的進程就是系統進程 用戶進程:由用戶啓動的進程就是用戶進程

原创 ForkJoinTask的異常處理機制和方法

ForkJoinTask類提供了以下兩個方法: public final boolean isCompletedAbnormally() { return status < NORMAL; } 以上方法其實就是做個任務狀

原创 DI和DL

DI和DL其實是Spring IoC的兩種方式,比如A類實體依賴B類實體和C類實體,DI是被動接受注入,那麼A類就會被動接受Ioc容器爲自己注入B類實體和C類實體。DL是主動尋找,A類實體就會主動去查找它依賴的B類實體和C類實體。

原创 線程池在工作中的錯誤使用

線程池一定要在合理的單例模式下才有效,不要把創建線程池的方法放在另一個方法裏,這樣一旦另一個方法被多處調用,就會創建出多個線程池 線程池數據不要設置過大,這樣可能會導致請求過載,出現這種情況就別談什麼線程複用了,所以要適當的加上

原创 32位/64位CPU的32位/64位指的是什麼?

32位/64位CPU,其中的32位/64位指的就是CPU位寬,而更大的位寬,一次能處理更大範圍的數據運算以及支持更大容量的內存。

原创 瞭解一下CPU時間片輪轉機制原理

時間片輪轉調度是一種最古老,最簡單,最公平且使用最廣的算法。每個進程被分配一時間段,稱作它的時間片,即該進程允許運行的時間。 系統會維護一張就緒進程列表,其實就是一個先進先出的隊列,新來的進程就會被加到隊列的末尾,然後每次執行進程

原创 讀寫鎖是可重入鎖,那麼支持的重入數量最大是多少?

讀鎖和寫鎖的數量最大都只能是65535,也就是說讀寫鎖最多支持65535個遞歸寫入鎖和65535個遞歸讀取鎖。

原创 工作竊取算法就不存在競爭情況了?

一般使用雙端隊列來配合工作竊取算法的使用,被竊取的線程永遠只從雙端隊列頭部獲取任務執行,而竊取任務的線程則永遠從雙端隊列的尾部獲取任務執行。通過這樣的方法,可以讓線程被充分的利用,不會空閒下來,同時一個線程從隊列頭拿任務,一個線程

原创 鎖對象要儘量小

對象鎖,鎖對象,在使用synchronized關鍵字時,需要指定一個鎖對象,synchronized關鍵字如果是加在方法上,默認會使用當前對象作爲鎖對象,如下: 不過也可以自己創建一個對象作爲鎖,如下: 這裏爲什麼要使用byt

原创 測量上下文切換次數和時長的工具

使用lmbench3來測量上下文切換的時長 使用vmstat來測量上下文切換的次數 以上都是Linux的工具

原创 面試之一句話簡述volatile

volatile是輕量級的synchronized,他保證了可見性,底層的關鍵主要是LOCK指令,該指令有兩個作用,一是強制把處理器緩存寫回內存,二是一旦處理器緩存寫回了內存,就讓其他處理器上相同的緩存失效,這樣的話,其他處理器想

原创 使用數據庫鎖要注意什麼?

加鎖和解鎖要在一個數據庫連接裏,否則會出現解鎖失敗的情況。

原创 瞭解一下共享內存和消息傳遞兩種併發模型

共享內存的併發模型:線程之間共享程序的公共狀態,通過讀寫內存中的公共狀態來進行隱式通信。 消息傳遞的併發模型:線程之間沒有公共狀態,線程之間必須通過發送消息來進行顯式通信。 Java中的併發採用的就是共享內存模型,因爲Java線程

原创 一方庫,二方庫,三方庫指的是什麼?

在Java領域中,每個服務上線後,對外輸出的接口是一個Jar包,而在微服務領域,Jar包被分爲一方庫,二方庫,三方庫。 一方庫:本服務在JVM進程內依賴的Jar包。 二方庫:在服務外通過網絡通信或者RPC(遠程服務調用)調用的服務