原创 java併發工具類:CountdownLatch,CyclicBarrier,Semaphore

在jdk開發包java.util.concurrent中提供了幾個非常有用的併發工具類: CountdownLatch CyclivcBarrier Semaphore 接下來一一解釋其特性和用法: 1.CountdownLa

原创 Java內存模型-JMM解析

文章目錄1.前言2.java內存模型的定義2.1爲何定義2.2 主內存和工作內存2.3內存間的交互操作2.4 volatile的出現3.原子性,可見性,有序性4.指令重排序5.Happens-Before(先行發生原則)6.vol

原创 volatile內存解析

閱讀本文需要熟悉java內存模型:Java內存模型-JMM解析 文章目錄1.前言2.volatile的出現及特性3.volatile讀寫與happens-before的關係4.volatile讀寫內存定義實現,避免指令重排 1.前

原创 JUC併發-CAS原子性操作和ABA問題及解決

概述 樂觀鎖:每次不加鎖,假設沒有衝突去完成某項操作,如果因爲衝突失敗就重試,直到成功爲止。 悲觀鎖:也叫獨佔鎖,synchronized就是一種獨佔鎖,會導致其它所有需要鎖的線程掛起,等待持有 鎖的線程釋放鎖 樂觀

原创 Lock實現類-ReentrantLock原理

ReentrantLock原理

原创 Synchronized 和 Lock 區別

Synchronized Synchronized是java內置的關鍵字,可修飾同步代碼塊或同步方法,確保了多個線程在同一時刻只能有一個線程處於 同步代碼塊或同步方法中,它的優點是確保了線程安全,java許多類的許多方法都使用了S

原创 通過字節碼分析-java靜態方法爲何不能被重寫,重寫和重載的本質

在進行文章論點分析之前,我們先要回顧一下方法調用過程,閱讀本文需要對jvm有一定了解 方法調用 方法調用一般發生在一個方法調用另一個方法中,所有方法的執行過程都是通過棧來完成,棧幀的出棧/入棧對應着方法的調用和卸載,在程序運行時,

原创 關於Slot的理解和jclasslib的使用

在局部變量表中,可以使用插件jclasslib來分析字節碼,具體使用步驟如下: 1.打開idea,安裝插件 2.Slot的理解 局部變量表以變量槽(slot) 爲最小單位,這裏不過多解釋,可以參考虛擬機棧詳解, 之所以要解釋s

原创 mybatis參數處理過程及原理

無法獲取參數 在mybatis的映射文件***Mapper.xml中,如果沒有規定傳入參數類型,就會發生一些錯誤 給出一個映射文件 <select id="getPerson" resultType="com.rwh.pojo.p

原创 深入理解java虛擬機類加載機制,通俗易懂

java源文件經編譯後以.class的文件形式存在本地磁盤上,在Class文件中描述的各類信息最終都需要加載到虛擬機中之後才能被運行和使用 類加載機制在jvm中的位置 1.類加載過程 虛擬機把類的數據從.class文件加載到內存

原创 java運行時數據區-虛擬機棧詳解

1.運行時數據區模型 在這個圖中,灰色的表示每個線程獨有,紅色的表示線程共享 2.虛擬機棧的特點 java虛擬機棧早期也叫java棧,每個線程在創建時都會創建一個虛擬機棧,如圖所示 多個線程所對應的棧組成了我們所說的java棧

原创 Java虛擬機-pc寄存器執行過程理解

概述 在java虛擬機中,程序計數寄存器的命名源於cpu的寄存器,cpu只有把數據裝載到寄存器才能夠運行, Java虛擬機中的pc寄存器並不是物理層面上的寄存器,而是一種抽象模擬 pc寄存器在jvm的位置: 作用 每個線程都有

原创 多個攔截器執行順序原理(源碼分析)

我們配置多個攔截器,看看輸出結果: 開始執行 查看結果 我們可以看出多個攔截器的執行順序爲 preHandle:從第一個往後執行 postHandle:從後往前執行 afterCompletion:從後往前執行 這裏的先

原创 一篇文章搞懂MySQL各種聯結JOIN

七種join模型 其中左外連接,右外連接,全外連接各有兩種模型 創建表 我們創建兩張表,部門表department和員工表employee,主鍵都爲id 內連接 根據內連接特點,我們可以得出7條正確結果:根據部門表的id,一

原创 spring MVC如何解析視圖,View視圖源碼解析

spring MVC如何解析視圖 試圖是渲染數據模型展示給用戶的組件,我們平時在控制器中寫的return "success";返回的就是邏輯試視圖,必須由視圖解析器解析了視圖,我們才能找到視圖模型,例如: <!-- 視圖解析器對象