原创 記一次生產問題--CompletableFuture默認線程池

在jdk7中,我們使用線程池可能會使用ExecutorService,默認有四種方式 Executors.newSingleeThreadPool()   Executors.newFixedThreadPool() Executors.

原创 源碼解讀--HashMap(jdk8)

一.基礎知識 之前寫過一篇jdk7版的HashMap,今天在此基礎上面講講jdk8中的HashMap。先來看看他們的不同。java源碼系列。 1.jdk7中,擴容插入使用的是前插法,jdk8中使用的是尾插法。 2.jdk7中使用的是數組+

原创 java 線程池深入介紹

一簡介線程的使用在java中佔有極其重要的地位,在jdk1.4極其之前的jdk版本中,關於線程池的使用是極其簡陋的。在jdk1.5之後這一情況有了很大的改觀。Jdk1.5之後加入了java.util.concurrent包,這個包中主要介

原创 源碼解讀--LinkedBlockingDeque講解

   在上一遍線程池的講解中,如果線程的大小大於核心線程的大小,就會放到緩衝隊列裏面,這個隊列就是LinkedBlockingDeque。下面就來深入講解一下這個隊列。java源碼系列。一.LinkedBlockingDequ的定義首先看

原创 手寫分佈式配置中心

一.引言    隨着微服務架構的興起,分佈式配置中心越來越必不可少。目前比較流行的有攜程的Apollo,阿里的disconf,淘寶的diamond。 二.原理      其實實現原理可以簡單的概括如下:客戶端先集成框架,在啓動的時候已經將

原创 httpclient大量請求網絡拒絕 Connection pool shut down

1.背景描述 項目中每次400條數據遞歸網絡請求第三方數據,該次遞歸總的數據量有220000左右,可以算出大概需要550次調用。但是數據跑到13W左右,程序中斷。 2.案例分析 ①.系統跑了一遍,沒有看到任何日誌。 分析: 因爲是多線程應

原创 手寫基於redis實現分佈式限流器-pdlr

一.限流器介紹     簡單來講,限流器就是控制流量訪問速率的一種機制,在短時間內大量流量訪問時,不至於使服務器崩潰。比如,一分鐘之內,如果限制1000個請求可以訪問,當第1001個請求到達時,請求被拒絕(這時最好對其進行監控)。 二.限

原创 一個隊列如何找出倒數第k個值

問題:一個隊列如何找出倒數第k個值?解:第一種:如果這個隊列是一個單項指針的隊列,裏面的結構如下                                        這樣的話,可以建兩個指針,一個循環到底的時候,控制兩次指針相差

原创 深入講解volatile關鍵字

volatile這個關鍵字可能很多朋友都聽說過,或許也都用過。在Java 5之前,它是一個備受爭議的關鍵字,因爲在程序中使用它往往會導致出人意料的結果。在Java 5之後,volatile關鍵字才得以重獲生機。  volatile關鍵字雖

原创 如果線程池中線程任務已經執行完畢了,當前線程的狀態是怎樣的?

1.代碼樣例 int corePoolSize = 2; int maximumPoolSize = 4; long keepAliveTime = 20; TimeUnit unit = TimeUnit.SE

原创 什麼是java中的CAS

問題一:java中的CAS是什麼?問題二:爲什麼要使用CAS?問題三:CAS使用中需要注意什麼問題?    這裏以提問的方式引出話題,下面帶大家慢慢了解CAS。1.CAS的含義CAS是compare and swap的縮寫,即我們所說的比

原创 Web系統大規模併發:電商秒殺與搶購

大規模併發帶來的挑戰在過去的工作中,我曾經面對過5w每秒的高併發秒殺功能,在這個過程中,整個Web系統遇到了很多的問題和挑戰。如果Web系統不做針對性的優化,會輕而易舉地陷入到異常狀態。我們現在一起來討論下,優化的思路和方法哈。請求接口的

原创 java中的字符retry: 是什麼?

  在看源碼時,出現了retry: ,這個是什麼意思?之前沒有接觸過,那先來一個簡單的例子。 public void testRetry() { int i = 0; retry: //①

原创 給一個二維數組,橫縱座標隨機,裏面數值要麼是1,要麼是0,統計對角是1的個數

問題:給一個二維數組,橫縱座標隨機,裏面數值要麼是1,要麼是0,統計對角是1的個數?解析 :首先說一下,怎樣的算對角,框成一個矩形是1的就是對角,四點在直線上的值爲1組成矩形就算對角。如下圖,框起來的都算對角。統計它裏面對角的個數?怎麼算

原创 源碼解讀--線程池TheadPoolExecutor深入講解

     在使用線程的,我們常使用線程池,線程的複用可以減少線程的開銷,很好的提高cpu資源利用率。這篇文章信息量會很大,做好準備哦~ java源碼系列。    有對線程池沒有直觀感覺的同學可以看看這篇文章。在jdk8中,從ThreadP