原创 類加載機制

一、類加載過程 虛擬機把描述類的數據從Class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這個過程就是類加載機制。Java的類加載過程主要分爲三個步驟:加載、鏈接、初始化。 首先是加載

原创 ConcurrentLinkedQueue和LinkedBlockedQueue的區別

一、ConcurrentLinkedQueue和LinkedBlockedQueue的區別 ConcurrentLinkedQueue內部基於CAS機制,在常見的多線程訪問場景,一般可以提供較高吞吐量。多用於消息隊列(多個線程發送消息,先

原创 Java併發類庫中提供的線程池有哪幾種

一、併發類庫中的線程池 線程是不能重複啓動的,頻繁創建和銷燬線程存在一定的開銷。爲了減小這種開銷,提高資源利用率,我們可以使用線程池,讓線程進行復用。使用線程池後,創建線程相對於從線程池中獲取一個空閒線程,銷燬線程相對於向線程池歸還線程。

原创 診斷和監控JVM堆內和堆外內存使用

一、如何診斷和監控JVM堆內核堆外內存使用 可以使用綜合性的圖形化工具,如JConsole 可以使用命令行工具進行運行時查詢,如 jstat 和 jmap ,可以查看堆,方法區等使用數據。 可以使用jmap等提供的命令,生成堆轉儲(Hea

原创 Java常見的垃圾收集器有哪些

一、Java常見的垃圾收集器 Serial GC,它是最古老的垃圾收集器,採用複製算法,收集新生代垃圾。“Serial”體現在其收集工作是單線程的,並且在進行垃圾收集過程中,會進入“Stop-The-World”狀態。當然,其單線程也意味

原创 AtomicInteger的底層實現原理

一、AtomicInteger的底層實現原理 AtomicInteger是對int類型的一個封裝,提供原子性的訪問和更新操作,其原子性操作的實現是基於CAS(compare-and -swap)技術。 二、CAS CAS算法的過程是這樣的

原创 Java併發包提供了哪些線程安全類

一、Java併發包提供的線程安全類 提供了比synchronized更高級的各種同步結構。比如ReentrantLock,Semaphore,CountDownLatch,CyclicBarrier等。 各種線程安全的容器,比如Concu

原创 線程的生命週期和狀態轉移

一、一個線程兩次調用start()方法會出現什麼情況 Java的線程是不允許啓動兩次的,第二次調用start()方法會拋出IllegalThreadStateException,這是一種運行時異常。多次調用start()會被認爲是一種編程

原创 Synchronized底層實現

一、鎖的幾種形式 傳統的鎖 傳統的鎖(也就是下文要說的重量級鎖)依賴於系統的同步函數,這些同步函數都涉及到用戶態和內核態的切換、進程的上下文切換,成本較高。所以對於加了synchronized關鍵字但是運行時並沒有多線程競爭,或兩個線程接

原创 面向對象設計基礎

一、接口和抽象類的區別 接口是對行爲的抽象,是抽象方法的集合。利用接口可以實現API定義和實現分離的目的。接口裏面不能包含任何變量,不能實例化。同時,接口沒有非靜態方法的實現,也就是說要麼是抽象方法,要麼是靜態方法。Java標準庫定義了非

原创 Java NIO淺析

一、Java有哪些IO方式 傳統的java.Io包,基於流模型實現,提供了我們最熟悉的一些功能,包括File抽象,輸入輸出流等。交互方式是同步、阻塞的方式。比如在讀取輸入流時,在輸入流就緒之前,線程會一直阻塞在哪裏。它們之間的調用是可靠的

原创 synchronized和ReentrantLock有什麼區別

一、synchronized和ReentrantLock的區別 synchronized是Java內置的同步機制,它提供了互斥的語義和可見性。當一個線程已經獲取當前鎖時,其他試圖獲取的線程只能等待或阻塞在哪裏。在Java5之前,synch

原创 SpringBoot常用註解

一、概述 Spring Boot簡化了Spring應用的開發,不需要繁瑣的XML配置就能開發。  那Spring Boot是怎麼實現自動配置的呢?  這就要用到Spring Boot中提供的許多註解: Spring提供XML配置、註解配置

原创 正確理解Thread Local的原理與適用場景

本文轉發自技術世界,原文鏈接 http://www.jasongj.com/java/threadlocal/ ThreadLocal能解決什麼問題 由於 ThreadLocal 支持範型,如 ThreadLocal< StringB

原创 MySQL中key、primary key、unique key、index的區別

一、key CREATE TABLE `phpcolor_ad` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `type` medi