原创 Spring @Scheduled線程模型探究 - 發現問題

最近工程中發現一個奇怪的問題,簡單代碼邏輯如下所示: @EnableScheduling @Component public class SimpleImplement { private static final Log

原创 Spring @Scheduled線程模型探究 - 源碼追蹤

接上一篇我們來分析一下 @Scheduled 這個定時器的註解實現 首先我看下@Scheduled註解的定義 package org.springframework.scheduling.annotation; import j

原创 Spring @Scheduled線程模型探究 - 改爲多線程

通過上一節分析源碼我們知道,執行任務的是TaskScheduler的實現類,在ScheduledAnnotationBeanPostProcessor#finishRegistration()方法中會設置TaskScheduler

原创 Netty -從ServerBootstrap入手分析內部實現

編寫一個NIO Server用JDK NIO包實現非常繁瑣,要綁定端口、監聽客戶端連接、監聽數據、接收數據、處理數據。用Netty了了二三十行代碼就實現了這些功能,我們知道Netty對JDK NIO進行了封裝和改進,接下來從官方的

原创 Maven3種打包方式之一maven-assembly-plugin的使用

在Maven中,主要有3個插件可以用來打包: maven-jar-plugin,默認的打包插件,用來打普通的project JAR包; maven-shade-plugin,用來打可執行JAR包,也就是所謂的fat JAR包;

原创 Linux 安裝 FireFox 瀏覽器

該文檔爲FireFox在Linux系統上的安裝說明文檔,適用於CentOS6.4 安裝依賴 準備安裝包 atk-2.4.0.tar.xz cairo-1.12.2.tar.xz gdk-pixbuf-2.26.3.tar.xz

原创 控制三個線程交替打印ABC

package me.zyc.thread.test; import java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject; import java.

原创 RDD:基於內存的集羣計算容錯抽象

該論文來自Berkeley實驗室,英文標題爲:Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing。

原创 深入源碼剖析Thread.join實現

java.lang.Thread類提供一個靜態方法join可以阻塞主線程(調用join方法的線程),直到當前線程執行完。用法如下: join會保證t2在t1線程執行完退出之後再執行,程序執行結果總是如下 定義 實現 該方法掉用了

原创 JDK源碼走讀之深入理解線程池(ThreadPoolExecutor)

Java線程池提供了一個框架來統一管理線程,通過把提交任務和執行任務解耦,使開發者無需關心線程的運行狀態,只要把任務提交給線程池既可。使用線程池有以下好處: 1. 減少在創建和銷燬線程上所花的時間以及系統資源的開銷 2. 避免創建

原创 如何聰明地使用鎖

競爭鎖是造成多線程應用程序性能瓶頸的主要原因 區分競爭鎖和非競爭鎖對性能的影響非常重要。如果一個鎖自始至終只被一個線程使用,那麼 JVM 有能力優化它帶來的絕大部分損耗。如果一個鎖被多個線程使用過,但是在任意時刻,都只有一個線程嘗試獲取

原创 JDK源碼走讀之ReentrantLock

ReentrantLock的功能幾乎等同於Synchronized,在分析源碼之前,我們首先來明確一下ReentrantLock要實現的功能,這樣才能做到有的放矢。 控制線程執行順序。當線程獲取鎖進入Synchronized代碼塊(獲取

原创 JDK源碼走讀之LinkedList

LinkedList本質是一個雙端鏈表,雙端鏈表區別於雙向鏈表,雙向鏈表之鏈表的首位相連,而雙端鏈表則分別持有鏈表頭尾兩個節點,訪問時既可以從頭開始,也可以從尾部開始。 鏈表結構 定義 LinkedList實現了List、Dequet

原创 elasticsearch(5.2.0)安裝文檔

1、 集羣安裝 以三個節點集羣安裝爲例,使用elasticsearch-5.2.0進行安裝。 1.1、 硬件要求 系統要求:CentOS 6.x/CentOS7.x Linux內核要求: Linux2.6+(不開啓system call