原创 Java多線程 - ReentrantLock的使用

1. 基本概念和使用 可重入鎖: 也叫做遞歸鎖,指的是同一線程 外層函數獲得鎖之後 ,內層遞歸函數仍然有獲取該鎖的代碼,但不受影響。 在JAVA中ReentrantLock 和synchronized 都是可重入鎖; 重入鎖Reentra

原创 Java容器 - CopyOnWriteArrayList詳解

1. 寫入時複製(CopyOnWrite)思想 寫入時複製(CopyOnWrite,簡稱COW)思想是計算機程序設計領域中的一種優化策略。其核心思想是,如果有多個調用者(Callers)同時要求相同的資源(如內存或者是磁盤上的數據存儲),

原创 算法 - 排序 - 基數排序

1.  原理 基數排序又稱爲“桶子法”,從低位開始將待排序的數按照這一位的值放到相應的編號爲0~9的桶中。等到低位排完得到一個子序列,再將這個序列按照次低位的大小進入相應的桶中,一直排到最高位爲止,數組排序完成。 LSD——從低位向高位排

原创 算法 - 排序 - 排序算法總結

1. 算法分類 十種常見排序算法可以分爲兩大類: 非線性時間比較類排序:通過比較來決定元素間的相對次序,由於其時間複雜度不能突破O(nlogn),因此稱爲非線性時間比較類排序。 線性時間非比較類排序:不通過比較來決定元素間的相對次序,它可

原创 算法 - 排序 - 快速排序

1. 原理    快速排序,說白了就是給基準數據找其正確索引位置的過程.    如下圖所示,假設最開始的基準數據爲數組第一個元素23,則首先用一個臨時變量去存儲基準數據,即tmp=23;然後分別從數組的兩端掃描數組,設兩個指示標誌:low

原创 算法 - 排序 - 選擇排序

1. 原理 表現最穩定的排序算法之一,因爲無論什麼數據進去都是O(n2)的時間複雜度,所以用到它的時候,數據規模越小越好。唯一的好處可能就是不佔用額外的內存空間了吧。理論上講,選擇排序可能也是平時排序一般人想到的最多的排序方法了。 選擇排

原创 算法 - 排序 - 插入排序

1. 原理 插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需

原创 算法 - 排序 - 冒泡排序

1. 原理 冒泡排序是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因爲越小的元素會經由

原创 算法 - 排序 - 歸併排序

1. 基本思想 歸併排序(MERGE-SORT)是利用歸併的思想實現的排序方法,該算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞歸求解,而治(conquer)的階段則將分

原创 Java多線程 - Callable接口解析

1.接口的定義: public interface Callable<V> { V call() throws Exception; } 2.Callable和Runnable的異同 先看下Runnable接

原创 Java多線程 - FutureTask使用及解析

1. 概念 FutureTask一個可取消的異步計算,FutureTask 實現了Future的基本方法,提供 start cancel 操作,可以查詢計算是否已經完成,並且可以獲取計算的結果。結果只可以在計算完成之後獲取,get方法會阻

原创 Java多線程 - Semaphore信號量的原理和示例

1. 簡介 Semaphore是一個計數信號量,它的本質是一個"共享鎖"。 信號量維護了一個信號量許可集。線程可以通過調用acquire()來獲取信號量的許可;當信號量中有可用的許可時,線程能獲取該許可;否則線程必須等待,直到有可用的許可

原创 Java多線程 - CountDownLatch原理

1. 簡介 CountDownLatch是一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。 CountDownLatch和CyclicBarrier的區別 (01) CountDownLatch的作用

原创 Java多線程 - 深入解析ThreadLocal 詳解、實現原理、使用場景方法以及內存泄漏防範

1. 簡介 從名稱看,ThreadLocal 也就是thread和local的組合,也就是一個thread有一個local的變量副本 ThreadLocal提供了線程的本地副本,也就是說每個線程將會擁有一個自己獨立的變量副本 方法簡潔幹練

原创 Java多線程 - Java中的join方法原理詳解

1. synchronized中的對象鎖是線程的實例 我們可以使用同步語句塊的方式對需要同步的代碼進行包裹。 Object obj = new Object(); synchronized(obj){    obj.wait();