原创 java併發編程(十)性能與可伸縮行

線程的最主要目的是提高程序的運行性能 要想通過併發來獲得更好的性能,需要努力做好兩件事情:更有效地利用現有處理資源,以及在出現新的處理資源時使程序儘可能地利用這些新資源。從性能監視的視角來看,CPU需要儘可能保持忙碌狀態。這也就是

原创 高併發場景下的庫存更新

在高併發的情況下,肯定不能高頻率的去讀寫數據庫,會嚴重造成性能問題的 必須使用緩存,將需要秒殺的商品放入緩存中,並使用鎖來處理其併發情況。當接到用戶秒殺提交訂單的情況下,先將商品數量遞減(加鎖/解鎖)後再進行其他方面的處理,處

原创 java併發編程(七)線程的取消與關閉

中斷 要使任務和線程安全、快速、可靠的停止下來並不是一件容易的事情。java沒有提供任何機制來安全的終止線程。 但它提供了中斷(Interruption),這是一種協作機制能夠使一個線程終止另一個線程的當前工作。 通常,中斷是實現

原创 java併發編程(九)活躍性危險

線程的活躍性危險主要包括死鎖,飢餓和活鎖。 死鎖 鎖順序死鎖:兩個線程試圖以不同的順序來獲得相同的鎖。 比如一個線程先獲取a鎖後獲取b鎖,另一個線程先獲取b鎖後獲取a鎖。如果兩個按照相同的順序來請求鎖(在相同時間請求a鎖,在相同

原创 常用算法講解及java實現

二分查找 /** 二分查找又稱折半查找,它是一種效率較高的查找方法。   【二分查找要求】:1.必須採用順序存儲結構 2.必須按關鍵字大小有序排列。 /** * * 二分查找算法 * * * * @param s

原创 rocketmq入門

RocketMQ簡介 1.RocketMQ是一款分佈式、隊列模型的消息中間件,是阿里巴巴集團自主研發的專業消息中間件,借鑑參考了JMS規範的MQ實現,更參考了優秀的開源消息中間件KAFKA,實現了業務消峯、分佈式事務的優秀框架。

原创 elasticsearch實現商品搜索

elasticsearch實現商品搜索 安裝es 安裝rocketmq 數據初始化 在項目啓動時對未初始化的索引進行數據的初始化。 使用restHighLevelClient操作es,注意使用高版本es,restHighLevel

原创 java併發編程(五)java常用的併發編程工具類

同步容器類 同步容器類包括vector和HashTable,這些同步類都是使用synchronizedXXX等工廠方法創建的,簡單粗暴的將整個對象鎖起來,效率很差。現在大多已經被棄用了。 併發容器類 併發容器類主要包括concur

原创 三種分佈式鎖的實現方式對比

基於數據庫實現 加鎖,或類似redis記錄數據。性能不好不用! 基於Redis實現 這是比較常用的一種實現方式。 通過setnx可以存入key,如果存入key成功返回1,如果存入的key已經存在了,返回0.如此可以判斷key存在說

原创 java併發編程(六)任務執行

大多數併發應用都是圍繞任務執行來構造的,任務通常是一些抽象且離散的工作單元。 在線程中執行任務 在線程中執行任務大致分爲兩種情況。一種是單線程串行化執行任務,另一種是爲每一個任務創建線程來執行。 串行化執行任務 在單線程中串行的執

原创 java併發編程(八)線程池

任務與執行策略之間的隱形耦合 Executors爲我們提供了相當靈活的執行策略來生成線程池,但是這些線程池的執行策略並不能滿足所有的任務。 對於這些任務我們需要手動的指定執行策略來執行任務。 這些任務包括以下幾種: 依賴性任務 大

原创 java併發編程(二)線程的安全性

線程安全的核心在於對狀態的訪問操作,特別是共享狀態和可變狀態。共享意味着可以同時被多個線程訪問,可變意味着生命週期內可以發生變化。 要是對象是線程安全的就要使用同步機制來保證對對象狀態的訪問。 java中主要的同步機制 包括關鍵字

原创 條件隊列實現生產者消費者

public static void main(String [] args){ Say say = new Say(); new Thread(new Runnable() {

原创 java併發編程詳解(一)初步瞭解線程

線程 線程與進程最大的區別就是 每個進程都獨立分配着獨立的資源包括內存等,進程之間通過粗力度的通信交換數據。而線程則是共享進程範圍內的資源。那個線程擁有各自的程序計數器,局部變量等。因此線程也被稱爲輕量級進程。 在大多數操作系統中

原创 使用命令行調用dubbo服務

今天排查線上問題需調用其他服務,公司項目本地沒辦法訪問預發環境,最終在預發環境服務器通過命令調用其他服務方法。 未來有時間可以基於這些命令封裝成一個dubbo服務的管理工具。 一.使用telnet命令連接dubbo服務 telne