原创 java多線程10:併發工具類CountDownLatch、CyclicBarrier和Semaphore

在JDK的併發包(java.util.concurrent下)中給開發者提供了幾個非常有用的併發工具類,讓用戶不需要再去關心如何在併發場景下寫出同時兼顧線程安全性與高效率的代碼。 本文分別介紹CountDownLatch、CyclicBar

原创 java多線程9:線程池

線程池 線程池的優點 我們知道線程的創建和上下文的切換也是需要消耗CPU資源的,所以在多線程任務下,使用線程池的優點就有: 第一:降低資源消耗。通過重複利用已創建的線程降低線程創建和銷燬造成的消耗。 第二:提高響應速度。當任務到達時,任務可

原创 java多線程8:阻塞隊列與Fork/Join框架 java多線程6:ReentrantLock

隊列(Queue),是一種數據結構。除了優先級隊列和LIFO隊列外,隊列都是以FIFO(先進先出)的方式對各個元素進行排序的。 BlockingQueue 而阻塞隊列BlockingQueue除了繼承隊列的所有方法外,還分別新增了支持阻塞的

原创 java多線程7:ReentrantReadWriteLock

真實的多線程業務開發中,最常用到的邏輯就是數據的讀寫,ReentrantLock雖然具有完全互斥排他的效果(即同一時間只有一個線程正在執行lock後面的任務), 這樣做雖然保證了實例變量的線程安全性,但效率卻是非常低下的。所以在JDK中提供

原创 java多線程6:ReentrantLock

下面看下JUC包下的一大併發神器ReentrantLock,是一個可重入的互斥鎖,具有比synchronized更爲強大的功能。 ReentrantLock基本用法 先來看一下ReentrantLock的簡單用法 public class

原创 java多線程5:線程間的通信

在多線程系統中,彼此之間的通信協作非常重要,下面來聊聊線程間通信的幾種方式。 wait/notify 想像一個場景,A、B兩個線程操作一個共享List對象,A對List進行add操作,B線程等待List的size=500時就打印記錄日誌,這

原创 java多線程4:volatile關鍵字

上文說到了 synchronized,那麼就不得不說下 volatile關鍵字了,它們兩者經常協同處理多線程的安全問題。 volatile保證可見性 那麼volatile的作用是什麼呢? 在jvm運行時刻內存的分配中有一個內存區域是jvm虛

原创 java多線程1:進程和線程的概念

進程和線程 說到多線程,不妨先談一談進程的概念。在百度百科中對進程的解釋如下:      其實簡單理解程序的實體,就是我們操作系統運行的一個基本單元      比如我們系統運行着的微信這個聊天軟件,就可以理解爲一個進程。   那麼線程又

原创 java多線程2:Thread中的方法

靜態方法: Thread類中的靜態方法表示操作的線程是"正在執行靜態方法所在的代碼塊的線程"。 爲什麼Thread類中要有靜態方法,這樣就能對CPU當前正在運行的線程進行操作。下面來看一下Thread類中的靜態方法: 1:currentTh

原创 java多線程3:synchronized

線程安全 多個線程共同訪問一個對象的實例變量,那麼就可能出現線程不安全的問題。  先看一段代碼示例,定義一個對象 MyDomain1 public class MyDomain1 { private int num = 0;

原创 你的ES數據備份了嗎? Docker-常用基建的安裝與部署

前言: 無論使用哪種存儲軟件,定期的備份數據都是重中之重,在使用ElasticSearch的時候,隨着數據日益積累,存放es數據的磁盤空間也捉襟見肘, 此時對於業務功能使用不到的索引數據,又不能直接刪除,將它遷移到線下數據盤存儲就變得十分必

原创 Grafana、Prometheus-監控平臺

 一:Grafana 簡介與部署 安利一個生產環境正在使用的監控和告警平臺:grafana,它是一個開源的可對指標和日誌進行查詢、可視化和告警的平臺。 docker 安裝官方文檔:https://grafana.com/docs/grafa

原创 Grafana、Prometheus、mtail-日誌監控 Grafana、Prometheus-監控平臺 Grafana、Prometheus-監控平臺

一:日誌如何監控 在上一篇博客Grafana、Prometheus-監控平臺中,簡單瞭解了Grafana與Prometheus對項目做特定的監控打點,可視化的配置操作。 但是對於沒有設置監控或者不容易進行監控的遺留應用程序,有時重寫、修補或

原创 分佈式調度任務-ElasticJob

一:問題的引出與復現  在一個風和日麗的工作日,公司運營發現系統的任務數據沒有推送執行,整個流程因此停住了。我立馬遠程登陸服務器,查看日誌,好傢伙,系統在瘋狂的打印相同的一段日誌:c.d.d.j.i.e.LeaderElectionServ

原创 Docker Elasticsearch 集羣配置 Docker-常用基建的安裝與部署

一:選用ES原因 公司項目有些mysql的表數據已經超過5百萬了,各種業務的查詢入庫壓力已經凸顯出來,初步打算將一個月前的數據遷移到ES中,mysql的老數據就物理刪除掉。 首先是ES使用起來比較方便,對於項目初期存儲一些不能刪除但又一般使