原创 搞定CAS的原理,看這一篇就夠了!

一、什麼是CAS? CAS (compareAndSwap),中文叫比較交換,是一種無鎖原子算法,映射到操作系統就是一條CPU的原子指令,其作用是讓CPU先進行比較兩個值是否相等,然後原子地更新某個位置的值,其實現方式是基於硬件平臺的彙編

原创 Redis之集羣原理及一致Hash算法

一、如何設計系統,能夠從Redis服務器的海量數據中快速找到所需? 我們可以採用分片,按照Hash算法劃分數據,分散存儲在多個節點上。 但是會涉及到一個問題,如果某個節點失效,那麼存儲在節點上面的數據也將失效,並且新增定位到該節點

原创 JUC下的BlockingQueue阻塞隊列詳解

一、前言      在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數據的問題。通過這些高效並且線程安全的隊列類,爲我們快速搭建高質量的多線程程序帶來極大的便利。本文詳細介紹了Bloc

原创 帶你搞懂volatile關鍵字的實現原理

一、認識volatile關鍵字 題目:用一個線程讀數據,一個線程改數據 public class ReaderAndUpdater { final static int MAX=50; static int init_v

原创 你知道如何中斷線程嗎?

一、已經廢棄的方法 stop() suspend() Thread thread=new Thread(); thread.stop();//強制中斷線程 thread.suspend();//掛

原创 調用new關鍵字後發生了啥過程?

根據new的參數在常量池中定位一個類的符號引用 如果沒有找到符號引用,說明類還沒有被加載到JVM中,則先進行類的加載 JVM虛擬機在堆中爲創建的對象分配內存 將分配的內存初始化爲零值(不包括對象頭) 調用對象的構造方法 返回對象

原创 如何給線程傳遞數據?

一、通過構造方法傳遞數據 在創建線程時,必須要建立一個Thread類的或其子類的實例。因此,我們不難想到在調用start方法之前通過線程類的構造方法將數據傳入線程。並將傳入的數據使用類變量保存起來,以便線程使用(其實就是在run方法中使用

原创 爲什麼線程通信的方法wait、 notify和notifyAll被定義在Object類裏?

Object lock = new Object(); synchronized (lock) { lock.wait(); ... } Wait-notify機制是在獲取對象鎖的前提下不同線程間的通信機制。在J

原创 主線程等待子線程運行完畢再運行的簡單方法

(1). Join   Thread提供了讓一個線程等待另一個線程完成的方法 — join()方法。當在某個程序執行流程中調用其它線程的join()方法時,調用線程將被阻塞,直到被join()方法加入的join線程執行完畢爲止,在繼續運行

原创 10秒帶你弄懂notify和notifyAll的區別!

首先明確兩個概念: 鎖池 當一個線程訪問synchronized代碼塊時,如果獲得鎖失敗,就會進入到鎖池中競爭獲取鎖 等待池 當一個線程調用wait方法後,會釋放擁有的鎖,並進入鎖對象的等待池中等待被喚醒 notify和not

原创 瞬間學會使用Socket進行通信

(一)TCP通信 服務器端套路 創建ServerSocket對象,綁定監聽端口 通過accept()方法監聽客戶端請求 連接建立後,通過輸入流讀取客戶端發送的請求信息 通過輸出流向客戶端發送響應信息 關閉響應的資源 impor

原创 別再問我什麼是yield()方法了!

yield有退讓、讓步的含義,yield()方法是Thread類中的靜態本地方法,讓我們看看方法描述: /** * A hint to the scheduler that the current thread is w

原创 如何讓線程返回數據?

從線程中返回數據和向線程傳遞數據類似,也可以通過類成員以及回調函數來返回數據,但類成員在返回數據和傳遞數據時有一些區別,下面讓我們來看看它們區別在哪。   一、通過類變量和方法返回數據 使用這種方法返回數據需要在調用start方法後才能通

原创 Class.forName和ClassLoader.loadClass兩個方法的區別?

一、類的加載過程 類的加載是指將指定的Class文件的二進制數據,加載到JVM的方法區中,並在堆區中創建對應的Class對象,該過程主要分爲以下幾步: 裝載:查找並導入對應的Class文件到JVM中 鏈接: (1)檢查:檢查載入