jdk 原始碼分析(8)java synchronized和鎖lock對比
lock:lock能做synchronized能做的所有的事情,但是lock 能過在資源競爭地方,通過投票等方法讓其他鎖釋放。而synchronized必須自願,lock 需要自己釋放出來,所以一般將lock.lock 放在try裡面,而lock.unlock 放在finally 裡面。 synchronized 配套的wait和notify ,與lock的condition 裡的await和 signal 相對應,lock可以獲取多個condition。 據網上資料建議: synchronized在處理競爭壓力不強的地方效能遠好於lock ,而lock相反。具體什麼地方使用synchronized 和
相關推薦
jdk 原始碼分析(8)java synchronized和鎖lock對比
因為synchronized 是關鍵字,無法看到原始碼,所以只能做一個簡單的分析對比了, synchronized 能鎖方法,也能鎖程式碼塊,其實也是一種重入鎖(也就是自己的鎖,自己可以進去),程式碼塊或方法離開,自動釋放鎖。 lock:lock能做synchro
jdk原始碼分析(1)java.lang.Object
java.lang.Object原始碼分析 public final native Class<?> getClass() public native int hashCode(); public boolean e
jdk 原始碼分析(20)java NIO包簡單分析
BIO 是一種阻塞的io,主要體現在: 1)accept 時候或者客戶端嘗試連線時是阻塞的, 2)資料讀寫是阻塞的,即使是沒有讀到資料,而且每次都是讀寫一個位元組。 對於服務端一般系統中常用的方式是沒接收一個請求new 一個thread,然後由這個handler去
jdk 原始碼分析(10)java unsafe 分析
jdk裡面原子操作unsafe都是native方法,看不到原始碼,所以特意下載openjdk 9 的版本。 1)獲取unsafe 物件,這個是openjdk裡的方法。通過反射獲得。 static {Reflection.registerMethodsToFi
Mybatis 原始碼分析(8)—— 一二級快取
一級快取 其實關於 Mybatis 的一級快取是比較抽象的,並沒有什麼特別的配置,都是在程式碼中體現出來的。 當呼叫 Configuration 的 newExecutor 方法來建立 executor: public Executor newExecutor(Transac
Android進階3:Activity原始碼分析(2) —— Activity啟動和銷燬流程(8.0)
上篇文章講述了app從啟動建立Activity呼叫onCreate,onStart, onResume方法,這篇文章講述一下Activity啟動的另一個切入點:startActivity方法,啟動Activity。 通過上一篇文章,我們總結一下: 1:A
JDK原始碼分析(3)HashSet
HashSet HashSet簡介 HashSet特點 非執行緒安全 允許null值 新增值得時候會先獲取物件的hashCode方法,如果hashCode 方法返回的值一致,則再呼叫equals方法判斷是否一致,如果不一致才add元素。 注意: 對於HashS
JDK原始碼分析(4)HashMap
JDK版本 HashMap簡介 HashMap基於雜湊表的 Map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證對映
jdk原始碼分析(四)——垃圾收集器與記憶體分配策略
本章介紹的垃圾收集器與記憶體分配策略主要就三點。 第一點:垃圾收集(垃圾回收)。問題:哪些記憶體需要回收?什麼時候回收?如何回收? 第二點:介紹垃圾收集器。問題:有幾種型別是垃圾收集器?根據第一點的介紹,屬於那種型別的? 第三點:記憶體分配。問題:怎麼分配的? 一、垃
jdk原始碼解析(七)——Java虛擬機器類載入機制
前面我們講解了class檔案的格式,以及它是什麼樣的。那麼接下來需要了解它怎麼被載入到jvm中呢?jvm的載入機制又是怎麼一個過程呢?本文參考了《Java 虛擬機器規範(Java SE 7 版)》的第五章內容來詳細解釋一下 虛擬機器類載入機制:虛擬機器把描述類的資料從cla
springcloud feign原始碼分析(8)——停一停腳步:結合feign動態代理的生成原理來畫圖劇透一下feign請求處理機制
我們已經明白了feign動態代理的機制 那麼這一節我們結合畫圖來說一下,對feign動態代理進行請求的時候會幹什麼 除非你在@FeignClient裡配置一個url屬性,指定你要訪問的服務的url地址,才會走我們沒看的一段原始碼邏輯,否則的話,直接是走loadBalanc
JDK原始碼分析(6)ConcurrentHashMap
JDK版本 ConcurrentHashMap原始碼分析 table:預設為null,初始化發生在第一次插入操作,預設大小為16的陣列,用來儲存Node節點資料,擴容時大小總是2的冪次方。 nextTable:預設為null,擴容時新生成的陣列,其大小為原陣列的兩倍。 sizeC
JDK原始碼分析(5)Vector
JDK版本 Vector簡介 /** * The {@code Vector} class implements a growable array of * objects. Like an array, it contains components that can be * accessed
JDK原始碼分析(4)HashSet
JDK版本 HashSet簡介 HashSet特點 非執行緒安全 允許null值 新增值得時候會先獲取物件的hashCode方法,如果hashCode 方法返回的值一致,則再呼叫equals方法判斷是否一致,如果不一致才add元素。 注意: 對於HashSet中儲存的物件,請注意正確重
JDK原始碼分析(3)HashMap
JDK版本 HashMap簡介 HashMap基於雜湊表的 Map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證對映的順序,特別是它不保證該順序恆久不變。
jdk原始碼解析(八)——Java虛擬機器位元組碼執行引擎
在前面我們瞭解了jvm執行時資料區,那個jvm圖中有執行引擎,那麼今天就解釋一下Java虛擬機器位元組碼執行引擎。 1 定義 Java虛擬機器位元組碼執行引擎是jvm最核心的組成部分之一,“虛擬機器” 是一個相對於 “物理機” 的概念,這兩種機器都有程式碼執行能力,其區別是物理機的執行
libevent原始碼分析(8)--2.1.8--事件申請與釋放
一、event_new 主要用來建立事件結構體,根據監聽事件型別,檔案描述符,以及回撥函式,回撥函式引數等建立,可以看成是事件的初始化過程,主要是設定事件的初始狀態,此時事件結構體剛剛創建出來還沒有新增到event_base的啟用或者等待列表中,是孤立存在的,需要呼叫eve
Muduo庫原始碼分析(8):單例模式實現
單例模式 保證一個類只有一個例項,並提供一個訪問它的全域性訪問點 Muduo庫實現單例模式的思想: 通過pthread_once在多個執行緒中只會初始化一次的特性實現的執行緒安全的單例模式
JAVA 多線程(8):synchronized 的同夥lock
tel @override str fin this 通知 public 大括號 創建 Lock:lock對象功能類似synchronized ,但是更加方便,或者說有更多的功能。 實現類: 1.ReentrantLock 2.ReentrantReadWri
AFNetworking3.1.0原始碼分析(一)整體框架和功能模組
簡介 1:基於系統NSURLSession類族封裝完成HPPT/HPPTS(GET,PUT,PSOT,DELEATE,HEAD)網路請求 2:擴充套件部分UIKit控制元件,比如擴充套件UIIMag