原创 ArrayBlockingQueue、PriorityBlockingQueue、LinkedBlockingQueue的使用

`ArrayBlockingQueue` 是一個先進先出的有界隊列,初始化容量後,無法進行修改 api add 超出隊列會報錯 java.lang.IllegalStateException: Queue full (對應的

原创 DelayQueue實際運用轉載

DelayQueue是一個無界阻塞隊列,可以用做延時處理,所謂延時處理就是說可以爲隊列中元素設定一個過期時間,其中的元素只有在時間到期時才能從中被提取。該隊列的頭部是延遲期滿後保存時間最長的Delayed 元素。存放到DelayD

原创 SynchronousQueue 轉載

https://blog.csdn.net/hudashi/article/details/7076814 SynchronousQueue是這樣 一種阻塞隊列,其中每個 put 必須等待一個 take,反之亦然。同步隊列沒有任何

原创 java 跳錶

轉載簡書 https://www.jianshu.com/p/60d2561b821c

原创 ScheduleExecutorService得使用

ScheduleExecutorService 效果和quartz 得效果差不多 實際開發中還是用quartz 比較好,但是看場景吧 api 得使用 public class ScheduleExecutorServiceTest

原创 Future的API使用

get() 方法是阻塞得 get(10,TimeUnit.SECONDS) get 的超時方法,線程裏面並不會死掉 isDone() 判斷有沒有做完 cancel() 取消(代碼裏詳細記錄) public static voi

原创 ExecutorCompletionService 的使用

Future 有一個問題就是,他的get 方法是把全部數據處理完再拿出來的。 ExecutorCompletionService 可以做到拿一條輸出一條 public static void main(String[] arg

原创 StampedLockd實現讀寫鎖

廖雪峯老師的親筆,我偷來的知識 轉載:https://www.liaoxuefeng.com/wiki/1252599548343744/1309138673991714 前面介紹的ReadWriteLock可以解決多線程同時讀,

原创 可重入鎖和不可重入鎖概念和區別(順便介紹一下ReentrantLock和ReentrantReadWriteLock)

文章轉載自:https://blog.csdn.net/u013452335/article/details/86576939 概念 可重入鎖就是一個類的A、B兩個方法,A、B都有獲得統一把鎖,當A方法調用時,獲得鎖,在A方法的鎖

原创 設計模式- 主動對象(Active Object)

以下兩段文言摘抄自https://blog.csdn.net/qq276592716/article/details/19421359 流程 對每一個要求併發執行的對象,分離其方法的調用和執行。這樣,這個對象的客戶就像是調用一個常

原创 CountDown 實現原理

如果在主線程中,使用線程,要使主線程在線程後面運行,那麼要添加 join 現在我們可以使用countdownlatch 來決定。 那麼先模擬一下,countdownlatch 的實現吧 public class CountDown

原创 多線程中Future的原理

通過Future 異步回調,不阻塞下面的執行,並且在方法最後執行完畢前,調用方法或通過回調的方法獲取返回值。 其核心其實就是創建一個線程 這也是多線程的一個設計模式 public interface Future<T> {

原创 讀寫鎖實現原理

僅模擬讀寫鎖的實現原理,具體使用還是Java併發包中ReadWriteLock 讀寫鎖的原理 讀和讀互不影響,讀和寫互斥,寫和寫互斥 代碼實現 /** * @Date: 2020/3/3 21:21 * @Descripti

原创 java基本類型和引用類型

一、基本數據類型: byte:Java中最小的數據類型,在內存中佔8位(bit),即1個字節,取值範圍-128~127,默認值0 short:短整型,在內存中佔16位,即2個字節,取值範圍-32768~32767,默認值0 int

原创 基於觀察者模式,寫的多線程監聽

主要用於併發不高的多線程監聽 public interface LifeCycleListener { void onEvent(ObservableRunnable.RunnableEvent event); }