原创 JUC鎖——可重入互斥鎖ReentrantLock

ReentrantLock介紹 ReentrantLock是一個可重入的互斥鎖,又被稱爲“獨佔鎖”。顧名思義,ReentrantLock鎖在同一個時間點只能被一個線程所持有;而可重入的意思是,ReentrantLock鎖可以被單個

原创 JUC鎖——Semaphore(信號量)

Semaphore簡介   Semaphore是一個計數信號量,它的本質是一個"共享鎖"。信號量維護了一個信號量許可集。線程可以通過調用acquire()來獲取信號量的許可;當信號量中有可用的許可時,線程能獲取該許可;否則線程必須

原创 NIO——簡介

 Java NIO(New IO),也可理解爲Non Blocking IO(非阻塞式IO)。NIO與原來的IO有同樣的作用和目的,但是使用的方式完全不同,NIO支持面向緩衝區的、基於通道的IO操作。NIO相對於IO在對文件的讀寫

原创 設計模式——面向對象設計原則

 在軟件開發中,爲了提高軟件系統的可維護性和可複用性,增加軟件的可擴展性和靈活性,程序員要儘量根據 7 條原則來開發程序,從而提高軟件開發效率、節約軟件開發成本和維護成本。 一、開閉原則  1、定義   開閉原則(Open Clo

原创 JUC鎖——共享鎖和可重入讀寫鎖

概要   JUC中的共享鎖有CountDownLatch、CyclicBarrier、Semaphore、ReentrantReadWriteLock等,本章會以ReentrantReadWriteLock爲藍本對共享鎖進行說明。

原创 扯扯Java開發的淡

  有人說:這個世界上有兩件最難的事, 一是把別人的錢裝進自己的口袋;二是把自己的思想裝進別人的腦袋。對於第一件,有些人做起來並沒有那麼難,而且做得相當成功,那就是乞丐;至於第二件有兩類人做得比較成功,但卻艱辛地多,其中一類是老師

原创 NIO——SocketChannel

 SocketChannel 是連接到 TCP 網絡套接字的 Channel,相當於 Java 網絡編程中的 Socket。有兩種創建 SocketChannel 的方式: 手動開啓一個 SocketChannel 並連接到因特

原创 基於Java的泛型和反射實現通用的增刪改查(0)——概覽

一、主要內容  專欄的標題基本上已概括了本專欄的主要內容,本專欄是基於Java的泛型和反射,結合SpringBoot和JPA實現生產級別的通用的增刪改查,即將所有的單表的增刪改查以及常用的聯表查詢等操作抽取到父類中實現。此後子類要

原创 基於Java的泛型和反射實現通用的增刪改查(4)——通用增刪改查操作的優雅實現

一、回顧  在上一節,我們講到了通用增刪改查的簡單實現,在簡單實現中,獲取對應的service或repository時,採用的是從ApplicationContext中手動獲取的方式,這應該也是最容易想到的方式,因爲只要使用了Sp

原创 JUC鎖——LockSupport

LockSupport介紹   LockSupport是用來創建鎖和其他同步類的基本線程阻塞原語。LockSupport中的park() 和 unpark() 的作用分別是阻塞線程和解除阻塞線程,而且park()和unpark()

原创 基於Java的泛型和反射實現通用的增刪改查(2)——通用增刪改查操作的底層設計

一、設計理念  在互聯網項目或者其他傳統Web項目的開發過程中,對數據庫的操作可以說是項目的核心和根本。而數據庫操作無非就是增刪改查,而對所有表的增刪改查操作其實大同小異,非常相似。如果我們能夠將對單表的增刪改查操作抽象出來放在父

原创 基於Java的泛型和反射實現通用的增刪改查(3)——通用增刪改查操作的簡單實現

一、思考  通常而言,我們會在controller中調用service層的方法進行業務處理並給前端響應,service層在業務處理的過程中會調用repository層的接口完成數據庫操作。但是現在我們是將增刪改查等操作抽象到了父類

原创 基於Java的泛型和反射實現通用的增刪改查(1)——項目搭建

 1、使用Idea創建一個gradle項目   創建時需要填寫groupId等信息,這和創建maven項目一樣。  2、創建項目需要的目錄結構   在創建完gradle項目後你會發現Idea並沒有像創建maven項目那樣爲我們生成

原创 NIO——緩衝區Buffer

一、緩衝區  緩衝區(Buffer)是一個用於存取特定基本數據類型數據的容器,底層是這些基本數據類型的數組,由java.nio包定義,所有緩衝區都是Buffer抽象類的子類。主要用於與NIO通道進行交互,數據是從通道讀入緩衝區,從

原创 NIO——FileChannel

 FileChannel 是一個連接到文件的通道,使用 FileChannel 可以從文件讀數據,也可以向文件中寫入數據。Java NIO 的 FileChannel 是標準 Java IO 讀寫文件的替代方案。  FileCha