原创 Spring 事務 rollbackFor屬性
默認情況下,在遇到運行時異常和Error,Spring事務會進行回滾,而遇到非運行時異常Exception則不會回滾 可以通過rollbackFor指定需要回滾的受檢查異常,指定異常之後,被指定的異常和該異常的子類都會得到回滾,
原创 虛擬機內存結構概述
每一個線程都有一個程序計數器(Program Counter Register),如果線程正在執行的是一個java方法,這個計數器記錄的是正在執行的虛擬機字節碼指令的地址;如果正在執行的是native方法,這個計數
原创 RentrantReadWriteLock
http://ifeve.com/java-art-reentrantlock/ 節點在入隊之後在AQS中的所有節點都是先進先出(公平的),在入隊之前都是不公平的。所以,如果要實現公平和不公平,需要依靠子類的tryXXX系列
原创 線程池基礎類_ThreadPoolExecutor (JDK1.8)
ThreadPoolExecutor 簡介 ThreadPoolExecutor使用線程池執行提交的任務,還維護一些基本統計信息,例如已完成任務的數量。 爲了適應大多數場景,該方法提供了許多可調參數和鉤子方法。但是推薦使
原创 Exchanger
Exchanger可以用於讓兩個線程執行到某一個同步點時執行數據交換,到達同步點的線程需要調用exchange()方法,先到達同步點的線程會一直等待另一個線程也到達同步點並執行exchange().。 具體可參考:htt
原创 Semaphore
Semaphore用於控制同時訪問同一資源的最多線程數量。 具體可參考:http://ifeve.com/concurrency-semaphore/
原创 對象內存佈局
1、對象頭(Header) Mark Word:存儲對象自身的運行時數據,如果哈希嗎、GC分代年齡、鎖狀態標識、線程持有的鎖、偏向線程ID、偏向時間戳等,這部分數據在32位和64位虛擬機中(未開啓壓縮指針)分別是32bit和64
原创 CountDownLatch
http://ifeve.com/talk-concurrency-countdownlatch/ 實現原理 CountDownLatch內部實現了一個AQS的實例Sync,CountDownLatch的初始化容量爲state狀態
原创 線程池基礎類_ExecutorService(JDK1.8)
Executor接口 public interface Executor { /** * 在未來某個時刻執行給定的任務 */ void execute(Runnable command); }
原创 CyclicBarrier
CountDownLatch可以實現多個線程等待另外多個線程。CyclicBarrier則是實現了多個線程之間互相等待。 具體可參考:http://ifeve.com/concurrency-cyclicbarrier/
原创 Fork/Join框架
http://ifeve.com/talk-concurrency-forkjoin/
原创 線程池基礎類_FutureTask(JDK1.8)
Callable接口 //Runnable是沒有返回結果的任務,而Callable則是有返回結果的任務 public interface Callable<V> { /** * 有返回結果,並且可能拋出異常
原创 ConcurrentLinkedQueue
http://www.infoq.com/cn/articles/ConcurrentLinkedQueue 隊列是一個FIFO結構,所以每次入隊時,只有一個入隊的位置——隊尾(tail),而在出隊時,只有一個隊頭節點(hea
原创 線程池基礎類_CompletionService(JDK1.8)
CompletionService 用於解耦產生異步任務和消費任務結果(生產者和消費者),生產者提交用於執行的任務,消費者按照結果產生順序進行消費。 通常,CompletionService需要依賴Executor去執行
原创 普通對象(不包括數組對象、Class對象)的創建
1.加載類:當執行new語句時,首先將去檢查這個指令的參數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是否已被加載、解析和初始化過,如果沒有,那必須先執行相應類的加載過程。 2.分配內存(每個對象佔用的內