原创 十二、Java高級特性(CAS基本原理)

一、什麼是原子操作?如何實現原子操作? 如果有兩個操作A和B,分別有兩個不同的線程執行。從A所在線程來看,執行B的線程執行B的時候要麼將B執行完畢,要麼完全不執行B,那麼A和B對彼此來說是原子的。 1、實現原子操作可以用鎖 鎖機制基本滿足了

原创 十、Java高級特性(多線程死鎖)

一、synchronized死鎖 我們先來看以下代碼 示例 A線程 package com.it.test.thread.consumer_product.dielock; public class AThread extends T

原创 十五、序列化

1、概念 (1)序列化 將數據結構或者對象轉換成二進制序列的過程 (2)反序列化 將序列化過程所生成的二進制序列轉換成數據結構或者對象的過程 (3)持久化 將數據結構或者對象存儲起來,如內存、磁盤。 2、序列化的作用 進程之間、客戶端和服務

原创 十四、Java高級特性(volatile、synchronized關鍵字)

1、Java內存模型(JMM) 從抽象的角度來看,JMM定義了線程和主內存之間的抽象關係:線程之間的共享變量存儲在主內存中,每一個線程都有一個私有的本地內存,我們叫做工作內存。線程對共享變量的所有操作都是工作內存中進行,它首先會從主內存中讀

原创 一、Java高級特性(泛型)

一、爲什麼要使用泛型? 當我們在創建某個方法的時候,參數、返回值類型未知,創建某個類中的成員的時候,類型也是未知的,此時我們可以使用泛型,在我們實際調用方法的時候,或者創建具體的類對象的時候,再設置具體的類型。 或者當我們的方法在考慮到複用

原创 三、Java高級特性(註解、反射、動態代理)

一、靜態代理 實現代碼: (1)自定義接口HttpRequest package com.it.test.proxy; /** * http 請求的接口 */ public interface HttpRequest { vo

原创 二、Java高級特性(註解與反射)

一、前言 註解可以理解成標記,打標籤。單獨的一個註解是沒用的,需要搭配使用,例如搭配反射等等。我們需要通過使用註解上的值來做相應的操作。 二、自定義一個註解 package com.example.myapplication; impor

原创 六、Java高級特性(線程之間的通信)

1、等待和通知機制(wait、notify) wait()方法 使當前執行代碼的線程進入等待的狀態,該方法是Object類的方法,使當前線程進入預執行隊列,使用wait()方法前,必須拿到對象級別的鎖,即只能在同步方法裏執行,執行wait方

原创 四、Java高級特性(多線程基礎概念篇)

一、進程和線程的概念 1、進程 進程是操作系統進行資源分配的最小單元,資源例如:cpu,內存,磁盤IO。進程之間是獨立的。例如我們在windows上安裝的一個PPT程序叫應用程序,當我們啓動我們的PPT程序,操作系統中就會存在一個PPT的應

原创 五、Java高級特性(多線程基礎使用篇)

一、使用多線程有什麼優點? 使用多線程可以最大限度的利用cpu的空閒時間來處理其他任務,比如一邊讓操作系統處理正在打印的數據,一邊使用Word編輯文檔。CPU在這些任務之間不停的切換,由於切換的速度非常快,給使用者的感受就是這些任務幾乎是同

原创 八、Java高級特性(wait,notify/notifyAll)等待超時模式實現一個連接池

一、前言 今天我們通過wait,notify/notifyAll的知識實現一個等待超時的數據庫連接池 二、代碼 1、自定義一個數據庫連接類 package com.it.test.thread; public class MyConnct

原创 六、Java高級特性(多線程對象及變量的併發訪問)

一、非線程安全 多個線程對同一個對象中的實例變量進行併發操作時會出現值被更改、值不同步的情況,進而影響程序的執行流程。 二、線程安全 線程安全就是獲得實例變量的值是經過同步處理的、不會出現被更改不同步的情況。 兩個例子來演示非線程安全和線程

原创 七、JVM系列(垃圾回收的幾種類型)

Minor GC 從年輕代回收內存被稱爲Minor GC。 當JVM無法爲一個新的對象分配內存空間時,就會觸發Minor GC,比如當Eden區滿了,所以Eden區越小,越頻繁觸發Minor GC 當年輕代中的Eden區分配滿的時候,年輕

原创 五、JVM系列(垃圾回收機制)

前言 在Java中,如果一個對象不可能再被引用,那麼這個對象就是垃圾,應該被回收,以防暫用內存。 如何判斷垃圾? 1、引用計數法 我們可以很容易想到,通過引用計數的方法,當一個對象被引用的時候,引用+1,去除引用的時候-1,即引用數量爲0的

原创 三、JVM系列(Java虛擬機內存結構)

前言 在之前我們知道,Java源文件通過JavaC編譯器編譯成了字節碼文件(.class文件),接下來我們就要讓Java虛擬機運行字節碼文件,從而得到我們最終想要的結果。在這個過程,Java虛擬機會載入字節碼文件,將其存入Java虛擬機的內