原创 讀ConcurrentHashMap源碼

//先看構造函數public ConcurrentHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEV

原创 讀ScheduledThreadPoolExecutor源碼

//一個可以延遲執行的定時任務//先看構造函數 構造函數最重要的區別是傳入了DelayedWorkQueue一個延遲的queue/**總結:該線程池繼承了ThreadPoolExecutor。同時內部封裝了一個DelayedWorkQue

原创 讀Semaphore源碼

//一個信號量,只有在池中還擁有許可時才允許線程繼續執行。//先看構造函數//默認是非公平模式public Semaphore(int permits) { sync = new NonfairSync(permits);

原创 讀FutureTask源碼

//一個可以異步返回計算的結果//它同時實現了Future和Runnable//先看構造函數 public FutureTask(Callable<V> callable) { if (callable == null)

原创 讀ArrayDeque源碼

//一個雙端隊列 比stack和LinkedList效率高//先看構造函數public ArrayDeque() { elements = (E[]) new Object[16]; }public ArrayDequ

原创 讀AbstractExecutorService

//他是ExecutorService的部分實現public abstract class AbstractExecutorService implements ExecutorService//提交一個Runnable任務給Abstra

原创 java編譯編碼問題

最近由一個編碼問題。讓我對另一個編碼問題產生了疑惑。即我們在寫java源文件的時候一般使用的是utf-8編碼,但是tomcat控制檯(直接在bin裏面

原创 讀TreeMap源碼

//一個基於二叉紅黑樹實現的map//關於紅黑樹http://blog.csdn.net/chenssy/article/details/26668941這篇博客寫的非常好//另外TreeSet的是用TreeMap實現的。(組合設計模式,

原创 讀CyclicBarrier源碼

//一個循環的屏障。所有的線程在屏障處等待其他線程執行完畢。然後再各自執行。//先看構造函數 public CyclicBarrier(int parties) { this(parties, null); }//ba

原创 讀部分ThreadPoolExecutor源碼

//線程池//先看構造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

原创 讀CountDownLatch源碼

//在完成一組操作之前允許一個或多個線程等待內部用的AQSprivate static final class Sync extends AbstractQueuedSynchronizer { private static

原创 讀HashSet源碼

//先看構造函數 public HashSet() { map = new HashMap<>(); }public HashSet(int initialCapacity) { map = new Ha

原创 讀Executors源碼

//一個管理線程創建的類裏面都是靜態方法//創建一個corePoolSize和maximumPoolSize相等的線程池也就是當線程數爲nThreads時,就不在新增線程了。 public static ExecutorService n

原创 oracle分組查詢

oracle中分組查詢並且查詢每組前幾條數據select * from (SELECT b,c,row_number() OVER(PARTITION

原创 讀ConcurrentLinkedQueue

//這是一個無阻塞的隊列沒有加任何鎖全部利用CAS機制實現。效率極高。//先看構造函數public ConcurrentLinkedQueue() { head = tail = new Node<E>(null);