原创 Java8 ConcurrentHashMap實現原理

Java8 ConcurrentHashMap實現原理,基本和Java8的HashMap相同,不同於他的是前者保證了線程的安全性,和Java7的ConcurrentHashMap區別在於,兩者保證線程安全性的機理不同,Java7中採用了

原创 通過ReentrantReadWriteLock做一個緩存工具

JDK1.5開始就出現了java.util.concurrent.locks.ReentrantReadWriteLock,將鎖細分程了讀鎖和寫鎖, 讀鎖:屬於共享鎖,多個線程可同時獲取該鎖,在讀鎖代碼中獲取不到寫鎖,只有讀鎖釋放後才能

原创 CountDownLatch、CyclicBarrier、Semaphore的簡單理解和使用

1、CountDownLatch 是Jdk1.5引入的一個工具類,被稱作爲:倒計數器 創建對象時,參數實際爲參與的線程數 在執行過程中每執行一個線程調用一次countDown方法,計數器值減一,直至爲0 當調用await方法,方法會

原创 根據Lock和Condition寫生產者和消費者以及實現阻塞的消息隊列

JDK1.5開始引入併發包,由此,併發編程開始了性能提升的旅程  第一部分:生產者和消費者 描述:在多線程中,存在多線程同時操作一個或者是多個資源的情況,當生產線程生產出來產品,消費線程纔可以進行消費,如果當前產品已經不剩餘,則消費

原创 自己實現Lock(獨享鎖)

在線程的通信中,可以通過線程的park和unpark對線程提供許可證,或者將線程禁用。利用此機制,我們可以自己實現鎖 首先需要實現lock接口  主要需要實現的接口有lock() unlock() tryLock()等 需要定義一個

原创 Java中的鎖-可/重入鎖,,自旋鎖,悲/樂觀所,獨享鎖,共享鎖,非/公平鎖

Java 中鎖的概念  自旋鎖:爲了不放棄CPU執行權,循環使用CAS技術對數據進行嘗試更新,直至成功 悲觀鎖:假定肯定會發生併發衝突,同步所有對數據相關的操作,讀數據也上鎖  樂觀鎖:假定不會發生併發衝突,在更新數據時若發現數據和

原创 最簡單的SpringBoot 整合Quartz-教程-持久化到數據庫

背景: 項目中很多時候會有一些定時任務,而這些定時任務在特殊時期還有可能改變運行週期,這時候框架quartz就很好的解決了這個問題    項目結構圖   Springboot直接支持該依賴 <dependency>

原创 Springboot FeignClient微服務間調用Method has too many Body parameters 解決

背景:在做多服務之間需要使用FeignClient進行服務調用的時候,出現PathVariable annotation was empty on param 0.,根據提示需要指定value的值,以下爲具體解決過程 /** *

原创 Java+seleniumhq+phantomjsdriver+selenium-chrome-driver+selenium-firefox-driver截圖

背景:項目需要自動報告生成,其中主要的複雜點及是報表的生成及截圖寫入doc文檔,重點在報表的生成和截圖          於是引入了echarts(別人封裝好的組件)+seleniumhq(自動化測試工具) 引入POM依賴 

原创 Java 線程的終止

線程的終止 JDK中提供了stop()[不建議使用] 和 interrupt()兩種方式, 同時拋出一個未實現的destroy()[不能使用]方法, 目前stop已經被廢棄了,因爲stop是暴力停止會存在安全問

原创 Java線程池執行邏輯

問題:線程是不是越多越號 1、線程在Java中是一個對象,也是操作系統的重要資源,線程的創建、銷燬需要時間,如果創建時間+銷燬時間>執行任務的時間那就很不合算了 2、Java對象佔用堆內存,操作系統線程佔用系統內存年,根據JVM規範,

原创 JVM指令碼錶

   

原创 【網易雲課堂2019】微專業 – Java高級開發工程師(完整版)

https://tieba.baidu.com/p/6626343323?pid=131596903736&cid=0&red_tag=2381637719#131596903736

原创 Lock和Synchronized的選擇

1、Synchronized 不會導致死鎖現象發生;而Lock可能造成死鎖現象 2、Lock可以讓等待鎖的線程響應中斷;而Synchronized是做不到的 3、Lock可以知道有沒有成功獲取鎖;而Synchronized沒辦法得知

原创 基於Zookeeper一步步完善的分佈式鎖

本文以一個訂單服務作爲例子 首先需要一個訂單接口類 然後需要一個實現類 工具類爲 測試類 測試結果 在普通情況下是沒有問題的,在併發的情況下,會造成訂單編號的不唯一 加可重入鎖進行修正 測試類 測試結果 可重入