原创 Java中常見死鎖與活鎖的實例詳解

這篇文章主要介紹了Java中常見死鎖與活鎖的實例詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 本文介紹了Java中常見死鎖與活鎖的實例詳解,分享給大家,具體如下: 順序死鎖:過

原创 AbstractQueuedSynchronizer原理剖析

無論是公平鎖還是非公平鎖,它們的實現都依賴於AbstractQueuedSynchronizer,它提供了一個基於先進先出等待隊列 實現block locks和synchronizers的框架。特性如下 僅通過一個 int 類型來代

原创 Java併發編程之旅總覽

線程安全的概念 什麼時候線程不安全?怎樣做到線程安全?怎麼擴展線程安全的類? java對線程安全的支持 java 對線程安全支持有哪些? java 中的線程池 Executors的使用與ThreadPoolExecutor jav

原创 AbstractQueuedSynchronizer原理剖析

無論是公平鎖還是非公平鎖,它們的實現都依賴於AbstractQueuedSynchronizer,它提供了一個基於先進先出等待隊列 實現block locks和synchronizers的框架。特性如下 僅通過一個 int 類型來代表狀態

原创 Java中的顯示鎖ReentrantLock使用與原理

考慮一個場景,輪流打印0-100以內的技術和偶數。通過使用 synchronize 的 wait,notify機制就可以實現,核心思路如下: 使用兩個線程,一個打印奇數,一個打印偶數。這兩個線程會共享一個數據,數據每次自增,當打印奇數的線

原创 java synchronize - 線程同步機制

Java支持同步機制的是Monitor。Monitor就像是擁有一個特殊房間的建築,在同一時間裏,這間特殊的房間只能被一個線程擁有。 enter the monitor:進入這幢建築 acquiring the monitor:進入建築裏

原创 Java中常見死鎖與活鎖的實例

順序死鎖:過度加鎖,導致由於執行順序的原因,互相持有對方正在等待的鎖 資源死鎖:多個線程在相同的資源上發生等待 由於調用順序而產生的死鎖 public class Test { Object leftLock = new Obj

原创 java中線程池的生命週期與線程中斷

線程池生命週期包括: RUNNING:接收新的任務並處理隊列中的任務 SHUTDOWN:不接收新的任務,但是處理隊列中的任務 STOP:不接收新的任務,不處理隊列中的任務,同時中斷處理中的任務 TIDYING:所有的任務處理完成,有效的線

原创 java中的Executors簡介與多線程在網站上逐步優化的運用案例

提供Executor的工廠類 忽略了自定義的ThreadFactory、callable和unconfigurable相關的方法 newFixedxxx:在任意時刻,最多有nThreads個線程在處理task;如果所有線程都在運行時來了

原创 java 對線程安全支持有哪些?

同步容器。它的原理是將狀態封裝起來,並對每個公有方法都實行同步,使得每次只有1個線程能夠訪問容器的狀態。 Vector和HashTable Collections.synchronizedXXX方法 同步容器的問題 這種方式使得

原创 什麼時候線程不安全?怎樣做到線程安全?怎麼擴展線程安全的類?

當多個線程去訪問某個類時,如果類會表現出我們預期出現的行爲,那麼可以稱這個類是線程安全的。 什麼時候會出現線程不安全? 操作並非原子。多個線程執行某段代碼,如果這段代碼產生的結果受不同線程之間的執行時序影響,而產生非預期的結果,即發生了

原创 如何加快Dijkstra算法的運行速度?

算法導論(MIT 6.006 第18講) 如何加快Dijkstra算法的運行速度? 在Dijkstra算法中,面對單源單目標的最短路徑,如果遇到了要relax的節點u就是目標節點t,顯然就可以執行結束了。 Dijkstra算法 Dij

原创 從java的NIO版hello world看java源碼,我們能看到什麼?

Java NIO服務端代碼的hello world怎麼寫? public class NBTimeServer { public static void main(String[] args) { try {

原创 TCP的侷限性有哪些?

把書讀薄(TCP/IP詳解 卷一 第二十四章) 長肥管道遇到的問題有哪些? 在帶寬乘積很大的時候,即處於長肥網絡中,容易暴露出問題 capacity(b)=bandwidth(b/s) * round-trip time(s) 窗口過

原创 如何讀open jdk native 源碼

怎麼看open jdk native的源碼 類的命名與java類的命名是一模一樣的 方法的命名爲JNI的代碼風格 一般關注下文件頭,如果是系統文件,比如 JVM_ENTRY等類似這樣的字符是啥意思? JVM_ENTRY本身是一個宏定義