原创 Thread.yield原理分析

Thread.yield()方法的作用是暫時放棄當前線程對CPU的佔用權,將它讓給其它線程。他是如何實現的呢?通過看yield源碼,發現其是本地方法,找到其在JVM中的源碼實現如下: JVM_ENTRY(void, JVM_Yie

原创 java線程狀態變更及中斷實現

1 java創建線程的幾種方式 1.1 實現Runnable接口。 public class RunnableDemo implements Runnable{ public static void main(String

原创 代理模式 --- 靜態代理與動態代理;動態代理的實現原理;手寫實現自己的動態代理;比較jdk與cglib;

這篇文章,主要解決以下幾個問題: 分析靜態代理存在的問題。 分析jdk動態代理執行過程和實現原理。 動手實現自己的動態代理。 分析CGlib的動態代理實現原理。 比較CGlib動態代理和jdk動態代理。 1 靜態代理及存在的問

原创 Thread.join()方法原理分析

如果現在有這樣一個場景:在主線程中創建兩個線程T1和T2,通過start啓動線程後。我們想T1結束了再執行T2,等T1和T2都執行結束,才繼續執行主線程,怎麼能做到呢? 其實很簡單,通過join就可以實現: public clas

原创 Volatile全面解析,實現原理及作用分析

在java中,volatile有如下作用,一個是禁止指令重排序(編譯時指令重排序 和 CPU亂序執行)。另一個是保證多線程共享變量的內存可見性。爲了講解volatile時如何禁止指令重排序,防止CPU亂序執行,以及保證變量內存可見

原创 深入理解MySQL索引之B+Tree

正確的創建合適的索引,是提升數據庫查詢性能的基礎。在正式講解之前,對後面舉例中使用的表結構先簡單看一下: create table user ( id bigint not null comment 'id' p

原创 Random和ThreadLocalRandom原理分析

Random和ThreadLocalRandom都是用於生成隨機數的。用法比較簡單,這裏直接看代碼分析原理。 Random Random隨機數的實現幾乎都是依賴於內部的next方法,都是在next的基礎上進行額外的計算,這裏直接看

原创 Semaphore源碼分析

Semaphore通常用於在程序中做限流使用,控制一段程序同時只能有n個線程同時訪問。 既然是同時有多個線程能同時訪問,那Semaphore是用的肯定就是共享鎖。其原理就是有線程獲取了鎖,就對state減,釋放鎖後就對state加

原创 VM.getSavedProperty和System.getProperty區別

在研究一些源碼的時候,會發現,源碼中有時會通過VM.getSavedProperty獲取一些參數,我們平時寫應用時,獲取系統參數的時候,通常是使用System.getProperty,那VM.getSavedProperty和Sy

原创 idea打包可執行的jar與Error: Invalid or corrupt jarfile問題

build前的設置 1、在菜單中選擇 File->project structure 2、選擇Artifacts,點擊"+",選擇jar -> from modules with dependencies 3、選擇執行主類。執

原创 ReentrantReadWriteLock源碼分析

在看本文前,如果對ReentrantLock不瞭解的,請先看 ReentrantLock源碼分析,以免有些地方無法理解。 代碼的執行說明,都已註釋的方式寫在了代碼中,如果想看某個方法的分析,直接搜索方法名即可。本文中對於在Reen

原创 ReentrantLock Condition源碼分析

在看本文前,如果對ReentrantLock不瞭解的,請先看 ReentrantLock源碼分析,以免有些地方無法理解。 代碼的執行說明,都已註釋的方式寫在了代碼中,如果想看某個方法的分析,直接搜索方法名即可。當然,本文中對於在R

原创 從源碼分析Synchronized實現原理

前面的簡單鋪墊對於懂得人看起來可能有些羅嗦,如果前面都知道怎麼回事,可以直接 跳過1,2章節 往後看。 1 線程安全簡介 使用Synchronized,是爲了保證線程安全,那一般什麼情況下會出現線程不安全的情況?通常滿足一下兩個條

原创 hive創建表異常解決

hive創建表異常com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 7

原创 docker網絡鏈接——容器互聯

容器間互聯 默認情況下,在同一宿主機中運行的docker容器都是能夠進行網絡鏈接的。 docker關閉和重啓會導致容器的ip地址發生變化,所以容器提供的服務不能夠以IP地址進行相互鏈接 通過docker run –link選項