原创 Java併發之線程池簡介

一、線程池簡介         在Java中,使用線程來異步執行任務。Java線程的創建與銷燬需要一定的開銷,如果我們爲每個任務創建一個新的線程來執行,這些線程的創建與銷燬將消耗大量的計算資源。Java的線程在此情況下,既是工作單元,也是

原创 Java多線程中Lock的實現

在Java 1.5之後,併發包中新增了Lock接口用來實現鎖功能,它提供了Synchronized關鍵字類似的功能,只是在使用時需要顯式地獲取鎖和釋放鎖。雖然它缺少了隱式獲取鎖釋放鎖的便捷性,但是卻擁有了鎖釋放和獲取的可操作性、可中斷地獲

原创 Java併發之CountDownLatch

    在併發操作中,當需要當前線程c等待另一線程a結束後在運行的話,我們首先想到的是join方法,在c線程運行中調用a.join(),該方法會使當前線程阻塞於a,直到線程a運行結束,JVM調用a.notifyAll()方法喚醒z。  

原创 Java併發之ThreadLocal

    在Java中,對象是線程共享的,當我們想讓線程獨自擁有專屬於自己的變量時,可以使用ThreadLocal類。     ThreadLocal類提供了線程局部(Thread-Locak)變量。這些變量不同於他們的普通對應物,因爲訪問

原创 Java併發容器之ConcurrentLinkedQueue

隊列(Queue)是一種先進先出的數據結構,Java中實現了Queue<E>接口的類都具有隊列的功能。我們常用的LinkedList就實現了Queue接口,具有了offer()、poll()等操作。但是,LinkedList是線程不安全的

原创 Java併發容器ConcurrentHashMap原理及HashMap死循環原因的分析

HashMap是我們最常用的數據結構之一,它方便高效,但遺憾的是,HashMap是線程不安全的,在併發環境下,在HashMap的擴容過程中,可能造成散列表的循環鎖死。而線程安全的HashTable使用了大量Synchronized鎖,導致

原创 操作系統之線程的基礎知識

    在傳統操作系統中,每個進程有一個地址空間和一個控制線程。不過,經常存在在同一個地址空間運行多個控制線程的情形,線程就像是分離想進程,不過他們共享着地址空間。 爲什麼需要線程?     人們需要多線程的主要原因是,在許多應用中同時發

原创 Java多線程中線程的幾種狀態

Java線程在運行的生命週期中可能處於6種狀態,每個確定時刻,線程只可能處於一種狀態,6種狀態如下: 1)NEW:初始狀態,線程被構建,但是還沒有執行start()方法。 2)RUNNABLE:運行狀態,Java線程將操作系統中的就緒和運

原创 操作系統之進程的基礎知識

操作系統中最核心的概念是進程:這是一個對正在運行程序的抽象。操作系統的其他所有內容都是圍繞着進程的概念展開的。 進程是操作系統提供的最古老的也是最重要的抽象概念之一。即使只有一個CPU,它也是支持(僞)併發操作的能力。它們將一個CPU變成

原创 Java併發之CyclicBarrier

    上一篇我們介紹了CountDownLatch的使用方法和實現原理,CountDownLatch的計數器只能使用一次,用來使一組線程阻塞於另一組線程。本篇我將介紹Java另一款併發工具CyclicBarrier。 一、同步屏障Cyc

原创 K8s網絡實戰分析之Calico-ipip模式

Kubernetes爲每個Pod都分配了唯一的IP地址,一個Pod裏的多個容器共享PodIp地址。Kubernetes要求底層網絡支持集羣內任意兩個Pod間的TCP/IP直接通信。Kubernetes的跨主機任意Pod訪問方式主

原创 Java併發之線程池的實現原理

    上一篇我們簡單介紹了Java線程池ThreadPoolExecutor的基本應用和簡單的操作流程。這一篇我們將深入理解線程池的實現方法,只有徹底掌握,才能正確運用! 一、構造方法     ThreadPoolExecutor的基本

原创 Java併發容器之ArrayBlockingQueue

一、ArrayBlockingQueue簡介     ArrayBlockingQueue是一個數組支持的有界阻塞隊列。按照FIFO的原則對元素進行排序。隊列的頭部 是在隊列中存在時間最長的元素。隊列的尾部 是在隊列中存在時間最短的元素。

原创 Java併發容器之阻塞隊列簡介

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

原创 Java併發容器之LinkedBlockingQueue

    上一篇我們學習了ArrayBlockingQueue的實現原理,這一篇我們來學習與之對應的LinkedBlockingQueue。很明顯,ArrayBlockingQueue內部是基於數組實現的,而LinkedBlockingQu