原创 08-AQS之ReentrantLock

AQS原理分析 什麼是AQS java.util.concurrent包中的大多數同步器實現都是圍繞着共同的基礎行爲,比如等待隊列、條件隊列、獨佔獲取、共享獲取等,而這些行爲的抽象就是基於AbstractQueuedSynchronizer

原创 11-阻塞隊列BlockingQueue

阻塞隊列介紹 Queue接口 public interface Queue<E> extends Collection<E> { //添加一個元素,添加成功返回true, 如果隊列滿了,就會拋出異常 boolean add(

原创 15-併發設計模式

併發(多線程)設計模式不同於傳統設計模式,更關注的是併發編程中特定場景的解決方案。對於併發設計模式同學們務必理解。 終止線程的設計模式 思考:在一個線程 T1 中如何正確安全的終止線程 T2? 錯誤思路1:使用線程對象的 stop() 方法

原创 10-AQS之ReentrantReadWriteLock

讀寫鎖 現實中有這樣一種場景:對共享資源有讀和寫的操作,且寫操作沒有讀操作那麼頻繁(讀多寫少)。在沒有寫操作的時候,多個線程同時讀一個資源沒有任何問題,所以應該允許多個線程同時讀取共享資源(讀讀可以併發);但是如果一個線程想去寫這些共享資源

原创 07-深入理解synchronized

Java共享內存模型帶來的線程安全問題 思考: 兩個線程對初始值爲 0 的靜態變量一個做自增,一個做自減,各做 5000 次,結果是 0 嗎? @Slf4j public class SyncDemo { private stat

原创 09-Semaphorer&CountDownLatch&CyclicBarrie

Semaphore Semaphore介紹 Semaphore,俗稱信號量,它是操作系統中PV操作的原語在java的實現,它也是基於AbstractQueuedSynchronizer實現的。 Semaphore的功能非常強大,大小爲1的信

原创 06-Atomic原子操作類詳解

Atomic原子操作類介紹 在併發編程中很容易出現併發安全的問題,有一個很簡單的例子就是多線程更新變量i=1,比如多個線程執行i++操作,就有可能獲取不到正確的值,而這個問題,最常用的方法是通過Synchronized進行控制來達到線程安全

原创 12-ForkJoin

任務類型 思考: 線程池的線程數設置多少合適? 我們調整線程池中的線程數量的最主要的目的是爲了充分併合理地使用 CPU 和內存等資源,從而最大限度地提高程序的性能。在實際工作中,我們需要根據任務類型的不同選擇對應的策略。 CPU密集型任務

原创 13-高性能內存隊列Disruptor

Disruptor簡介 Disruptor是英國外匯交易公司LMAX開發的一個高性能隊列,研發的初衷是解決內存隊列的延遲問題(在性能測試中發現竟然與I/O操作處於同樣的數量級)。基於Disruptor開發的系統單線程能支撐每秒600萬訂單,

原创 14-Future&CompletableFuture

Callable&Future&FutureTask 直接繼承Thread或者實現Runnable接口都可以創建線程,但是這兩種方法都有一個問題就是:沒有返回值,也就是不能獲取執行完的結果。因此java1.5就提供了Callable接口來實

原创 深入Hotspot源碼與Linux內核理解NIO與Epoll

IO模型 IO模型就是說用什麼樣的通道進行數據的發送和接收,Java共支持3種網絡編程IO模式:BIO,NIO,AIO BIO(Blocking IO) 同步阻塞模型,一個客戶端連接對應一個處理線程 BIO代碼示例: package com

原创 ElasticSearch簡介和快速實戰

ElasticSearch簡介和快速實戰 ElasticSearch與Lucene Lucene可以被認爲是迄今爲止最先進、性能最好的、功能最全的搜索引擎庫(框架) 但是想要使用Lucene,必須使用Java來作爲開發語言並將其直接集成到你

原创 @valid和自定義異常

@valid和自定義異常 問題的產生: 當有很多參數需要校驗時,比如name,age,email等很多參數都需要判空,或者有長度限制時,如果後端寫很多if-else就有很多代碼,不美觀,不優雅.前端每個參數都效驗的話工作量也很大 本文旨在解

原创 Redis的主從架構+哨兵模式

Redis主從架構     redis主從架構搭建,配置從節點步驟: 1、複製一份redis.conf文件的目錄 cd /usr/local/java cp -a redis redis_6380 2、將相關配置修改爲如下值:

原创 Nacos 註冊中心集羣搭建

本文使用直連 ip 模式,不通過 Nginx 轉發 環境準備 1.項目配置中按如下編寫yml文件即可: spring: # 配置 Nacos 註冊中心 cloud: nacos: discovery: