原创 高併發編程:16、觀察者模式監控線程狀態

一、概述 觀察者模式監控線程狀態 二、代碼 Client public class Client { public static void main(String[] args) { ThreadLifeCycleObserver

原创 K條單向鏈表合併

一、概述 K條有序鏈表合併,按順序合併鏈表如: 鏈表A:1-3-5 鏈表B:2-4 鏈表C:3-6-7 鏈表D:7-8-9 鏈表E:10-11 合併結果:1-2-3-4-5-6-7-8-9 二、代碼 構建A、B、C、D、E 5條鏈表。

原创 高併發編程:15、緩存一致性,volatile關鍵字(二)

一、概述 能保證修飾變量的可見性、有序性,但不能保證原子性。 二、分析 1、不能保證原子性 public class Thread17 { private static volatile Integer INIT_VALUE = 0

原创 高併發編程:15、緩存一致性,volatile關鍵字(一)

一、概述 cpu緩存一致性。 java線程緩存一致性。 volatile關鍵字:可見性。 二、緩存一致性 1、先看一段代碼 public class Thread17 { private static Integer INIT_VA

原创 單向鏈表合併

一、概述 合併兩個單向有序鏈表如: 鏈表A:1-3-5 鏈表B:2-4 合併結果:1-2-3-4-5 什麼是單向鏈表:https://blog.csdn.net/oJueQiang123456/article/details/863840

原创 高併發編程:14、線程的waitSet

public class Thread16 { private static final Object LOCK = new Object(); public static void main(String[] args) {

原创 原 高併發編程:13、多線程下的單例模式

一、概述 多線程下的單例模式。 推薦使用第6或第7種模式。 二、代碼 1、餓漢模式 public class SingletonObject1 { private static final SingletonObject1 sing

原创 高併發編程:11、程序添加鉤子、捕捉線程中拋出的異常、打印調用關係

一、概述 添加鉤子addShutdownHook: 程序結束時會執行鉤子程序裏面的代碼,命中行中kill程序也會執行,但kill -9 鉤子程序不會執行 捕捉線程中拋出的異常 打印調用關係 二、代碼 public class Threa

原创 高併發編程:12、簡易版線程池

一、概述 支持最小線程數,預估線程數,最大線程數 支持最大任務數量 支持關閉線程池 二、代碼 public class Thread15 { public static void main(String[] args) { Sim

原创 CHD+CM-2 常見問題

1、spark和hbase交互找不到org.apache.htrace包:Caused by: java.lang.ClassNotFoundException: org.apache.htrace.Trace java.lang.re

原创 高併發編程:10、自定義鎖,實現synchronized的設置超時

一、概述 當有10個線程在調用一個被synchronized的方法時,只有當前拿到鎖的線程執行完之後,其它9個線程纔能有一個線程搶到鎖。反覆如此,如果方法固定調用時長爲10秒,執行完成之後就是100秒。 所以當我們調用這個方法的時候想要設

原创 高併發編程:9、wait、notify、notifyAll(三 完整的消費者、生產者)

一、概述 上一篇文章介紹到多個生產者和多個消費者時,會使生產者和消費者都處於wait等待狀態,處於假死狀態。 所以用notifyAll替換notify,喚醒所有處於等待中的線程。 二、代碼 public class Thread12 {

原创 高併發編程:8、多線程死鎖分析

一、概述 甲有兩個兒子A和B,乙有兩個兒子C和D。 甲有一把鎖鑰匙在A兒子身上,乙有一把鎖鑰匙在C兒子身上。 A認識D,需要找D幫忙拿一下東西,但是D沒有鑰匙,鑰匙在大哥C身上,等待大哥C辦完事才能拿到鑰匙。 C認識B,需要找B幫忙拿一下

原创 高併發編程:9、wait、notify、notifyAll(二 程序假死的原因分析)

一、概述 多個生產者和多個消費者同時存在時導致出現程序假死的原因分析。 二、代碼 public class Thread11 { private Integer index = 0; private volatile

原创 高併發編程:9、wait、notify、notifyAll

一、概述 wait JVM會把該線程放到等待池中,等待其他線程喚醒該線程,執行該方法的線程對象,釋放同步鎖。 notify 執行該方法的線程喚醒在等待池中等待的任意一個線程。 notifyAll 把線程轉到鎖池中等待,執行該方法的線程喚醒