原创 對象的訪問定位

​ 建立對象是爲了使用對象,Java程序需要通過棧上的reference數據來操作堆上的具體對象。由於reference類型在Java虛擬機規範中只規定了一個指向對象的引用,並沒有定義這個引用應該通過何種方式去定位、訪問堆中的對象

原创 運行時數據區

程序計數器 ​ Program Counter Register ​ 在虛擬機概念模型裏,字節碼解釋器工作時就是通過改變這個計數器的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都需要依賴這個計

原创 引用類型

強引用 ​ 強引用就是指在程序代碼之中普遍存在的,類似"Object obj=new Object()"這類的引用,只要強引用還存在,垃圾收集器永遠不會回收掉被引用的對象。 軟引用 ​ 軟引用是用來描述一些還有用但並非必需的對象。

原创 Semaphore

1.介紹 信號量爲多線程協作提供了更爲強大的控制方法。廣義上說信號量是對鎖的擴展,可以指定多個線程同時訪問某一資源。 2. 構造方法 public Semaphore(int permits) { sync =

原创 LockSupport示例

1. 介紹 LockSupport是一個非常方便實用的線程阻塞工具,它可以在線程內任意位置阻塞線程。和Thread.suspend()相比,它彌補了由於resume()發生在前,導致線程無法繼續執行的情況。和Object.wait

原创 volatile的內存語義

volatile的特徵 ​ 理解volatile特徵的一個好的辦法是把volatile變量的單個讀/寫,看成是使用同一個鎖對這些單個讀/寫做了同步。鎖的happens-before規則保證釋放鎖和獲取鎖兩個線程之間的內存可見性,這

原创 鎖的升級

Java SE 1.6爲了減少獲得鎖和釋放鎖帶來的性能消耗,引入了“偏向鎖”和“輕量級鎖”,在Java SE 1.6中,鎖一共有4種狀態,級別從低到高依次是:無鎖狀態、偏向鎖狀態、輕量級鎖狀態和重量級鎖狀態,這幾個狀態會隨着競爭情

原创 Java如何實現原子操作

在Java中可以通過鎖和循環CAS的方式來實現原子操作。 (1)使用循環CAS實現原子操作 ​ JVM中的CAS操作正是利用了處理器提供的CMPXCHG指令實現的。自旋CAS實現的基本思路就是循環進行CAS操作直到成功爲止。 (2

原创 獨佔式同步狀態獲取與釋放

​ 通過調用同步器的acquire(int arg)方法可以獲取同步狀態,該方法對中斷不敏感 public final void acquire(int arg) { if (!tryAcquire(arg) &&

原创 CountDownLatch

1. 介紹 通常用來控制線程的等待,可以理解爲一個倒計數工具。它可以讓一個線程等待直到倒計數結束,再開始執行。計數只能減,不能增。 2. 構造函數 public CountDownLatch(int count); 接收一個整數

原创 ReadWriteLock

1. 介紹 ReadWriteLock是jdk5中提供的讀寫分離鎖,讀寫分離鎖可以有效的幫助減少鎖競爭,以提升系統性能。 讀-讀 不互斥 讀-寫 互斥,寫阻塞讀,讀也阻塞寫 寫-寫 互斥 維護了一對鎖 - 讀鎖與寫鎖 公平性 重入

原创 ThreadLocal中的WeakReference

​ Thread對象有一個變量名爲threadLocals的ThreadLocalMap對象,裏面定義了一個Entry數組,Entry對象弱引用了ThreadLocal。 ​ private void set(ThreadLoca

原创 阻塞隊列介紹

阻塞隊列(BlockingQueue)是一個支持兩個附加操作的隊列。這兩個附加的操作支持阻塞的插入和移除方法。 1)支持阻塞的插入方法:意思是當隊列滿時,隊列會阻塞插入元素的線程,直到隊列不滿。 2)支持阻塞的移除方法:意思是在隊

原创 21$emit與$on

emit與emit與emit與on $on $emit應用場景 子組件中觸發在父組件中定義的方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

原创 選擇排序

選擇排序,這個比較簡單: 每次比較出最小的,和第一個元素交換和第二個元素交換.,… 時間複雜度O(n^2),空間複雜度O(1) public void selectSort() { int[] arr = {1