原创 設計模式學習之策略模式 --2

設計模式學習之策略模式 定義 定義了算法族,分別封裝起來,讓它們可以相互替換,此模式讓算法的變化獨立於使用算法的用戶。 策略模式的使用場景 1、如果在一個系統裏面有許多類,它們之間的區別僅在於它們的行爲,那麼使用策略模式可以

原创 線程等待/通知機制的實現

方法wait()使當前線程等待,釋放鎖,並且在wait方法處停止執行,直到接到通知或被中斷爲止; 調用wai()方法前必須獲得該對象的對象級別鎖,如果調用wait()時沒有適當的鎖,拋出IllegalMonitorStateEx

原创 java線程池運行流程

用戶線程(ULT):不需要內核支持而在用戶程序中實現線程,不依賴操作系統核心,應用進程利用線程庫提供創建、同步、調度和管理線程得函數控制用戶線程。另外,用戶線程是由應用進程利用線程庫創建和管理,不依賴操作系統核心。不需要用戶態/核

原创 中國古詩文網

自己寫的一個網站,收藏中國古詩文。www.zggsw.online

原创 java時間輪

待完成

原创 算法的時間與空間複雜度

算法(Algorithm)是指用來操作數據、解決程序問題的一組方法。對於同一個問題,使用不同的算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。 那麼我們應該如何去衡量不同算法之間的優劣呢? 主要還是從

原创 (閉鎖)計數器、迴環柵欄、信號量

import java.util.concurrent.CountDownLatch; /** * (閉鎖)計數器,利用它可以實現類似計數器的功能, 比如有一個任務A,他要等到4個任務執行完畢之後才能執行,此時利用CountD

原创 HashMap的hash函數和下標計算

HashMap的hash方法如下 static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.ha

原创 阻塞隊列生產者消費者

package com.reentrant; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import

原创 單例雙重校驗鎖

public class SingleDoubleLock { /* 假設沒有關鍵字volatile的情況下,兩個線程A、B,都是第一次調用該單例方法, 線程A先執行instance = new Instance(),該構造方

原创 基於註解的spring profile

pom文件 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <

原创 生產者消費者

首先我要記錄一下鎖的相關知識點: x可以是this也可以是非this 當多個線程同時執行synchronized(x){}同步代碼塊時呈同步效果 當其它線程執行x對象中synchronized同步方法時呈同步效果 當其

原创 設計模式之狀態模式

狀態模式 狀態模式允許對象內部狀態改變的時候改變其行爲。狀態模式是對象的行爲模式。 狀態模式就是把對象的狀態封裝在一個狀態對象中,每個狀態一個類。 圖如下: 抽象的狀態角色TcpState封裝了一個特定的狀態對應的行爲;具體狀態

原创 同步阻塞I/O

傳統BIO通信 服務端,由一個Acceptor線程監聽客戶端的連接,接收到之後爲每個客戶端建立單獨的線程進行鏈路處理,處理完成後,通過輸出流返回給客戶端,線程銷燬。這就是典型的一請求一應答通信模型。 同步阻塞IO server端

原创 effective.java.9 使用 try-with-resources 語句替代 try-finally 語句

當用java打開了一個外部資源(數據庫連接、文件等)時,使用完畢後必須手動關閉它,因爲外部資源不手JVM管理,如果不手動關閉它,就會導致文件被異常佔用,數據庫連接過多等問題。 通常,try-finally語句是關閉外部資源最好的方