原创 Netty-架構設計及入門程序-3

一、原生 NIO 存在的問題 1、NIO 的類庫和 API 繁雜,使用麻煩:需要熟練掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。2、需要具備其他的額外技能:要熟悉 J

原创 Netty-BIO、NIO、AIO、零拷貝-2

Java BIO 編程 一、I/O 模型 1、I/O 模型簡單的理解:就是用什麼樣的通道進行數據的發送和接收,很大程度上決定了程序通信的性能 2、Java 共支持 3 種網絡編程模型/IO 模式:BIO、NIO、AIO 3、Java BI

原创 Netty-介紹-1

Netty介紹和應用場景 要求 已經掌握了 主要技術構成: Java OOP 編程、 Java 多線程編程、 Java IO 編程 、 Java 網絡編程、 常用的Java 設計模式(比如 觀察者模式 ,命令模式,職責

原创 基於AQS實現自定義同步類

Mutex(互斥鎖) Mutex是一個不可重入的互斥鎖實現。鎖資源(AQS裏的state)只有兩種狀態:0表示未鎖定,1表示鎖定。下邊是Mutex的核心源碼: class Mutex implements Lock, java.io.

原创 Java多線程-JUC-1(八)

前面把線程相關的生命週期、關鍵字、線程池(ThreadPool)、ThreadLocal、CAS、鎖和AQS都講完了,現在就剩下怎麼來用多線程了。而要想用好多線程,其實是可以取一些巧的,比如JUC(好多面試官喜歡問的JUC,就是現在要講的J

原创 Java多線程-ThreadLocal(六)

爲了提高CPU的利用率,工程師們創造了多線程。但是線程們說:要有光!(爲了減少線程創建(T1啓動)和銷燬(T3切換)的時間),於是工程師們又接着創造了線程池ThreadPool。就這樣就可以了嗎?——不,工程師們並不滿足於此,他們不把自己創

原创 Java多線程-線程關鍵字(二)

Java中和線程相關的關鍵字就兩:volatile和synchronized。 volatile以前用得較少,以後會用得更少(後面解釋)。它是一種非常輕量級的同步機制,它的三大特性是: 1、保證可見性,即強制將CPU高速緩存的數據立即寫入主

原创 Java多線程-ThreadPool線程池-3(五)

除了可以通過ThreadPoolExecutor自定義線程池外,同Stream API中的Collectors一樣,多線程裏的Executors類也提供了一組相關的線程池工具,可以直接拿來用,不用考慮用什麼隊列合適的問題。 Javac除了傳

原创 Java多線程-ThreadPool線程池-2(四)

線程池是個神器,用得好會非常地方便。本來覺得線程池的構造器有些複雜,即使講清楚了對今後的用處可能也不太大,因爲有一些Java定義好的線程池可以直接使用。但是(凡事總有個但是),還是覺得講一講可能跟有助於理解後面的常用線程池,所以該打臉還是打

原创 Java多線程-ThreadPool線程池-1(三)

開完一趟車完整的過程是啓動、行駛和停車,但老司機都知道,真正費油的不是行駛,而是長時間的怠速、頻繁地踩剎車等動作。因爲在速度切換的過程中,發送機要多做一些工作,當然就要多費一些油。 而一個Java線程完整的生命週期就包括: 1、T1:創建

原创 Java多線程-線程生命週期(一)

如果要問我Java當中最難的部分是什麼?最有意思的部分是什麼?最多人討論的部分是什麼?那我會毫不猶豫地說:多線程。 Java多線程說它難,也不難,就是有點繞;說它簡單,也不簡單,需要理解的概念很多,尤其是很多底層知識,如數據結構、操作系統

原创 文件上傳接入阿里雲OSS

目的:將文件交給阿里雲進行管理,可避免文件對本地服務器資源的佔用,阿里雲OSS還可根據讀寫偏好選擇合適的文件存儲類型服務器,文件異地備份等 一、阿里雲OSS基礎瞭解(前提) 1、存儲空間(Bucket) 用於存儲對象(Object)的容器

原创 RestTemplate上傳文件

1、上傳的文件是File類型 如果文件保存在本地,即可以通過File file = new File(path) 或者 文件路徑地址獲取到指定文件 public String uploadFile(File file) { /

原创 @DS("slave") 多數據源兼容事務問題解決方案

SpringBoot項目中用到多數據源,在方法上又必須加事務處理,此時可以對使用了@DS的方法或類添加@Transactional並添加事務隔離級別 舉例: 1、這是一個方法,方法內需要實現多數據源查詢  2、在該方法中判斷查詢哪一個

原创 Redis-[巡山]

一、NoSQL數據庫簡介 1、技術發展 技術的分類 1、解決功能性的問題:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN 2、解決擴展性的問題:Struts、Spring、SpringMVC、Hiber