原创 AtomicInteger
AtomicInteger AtomicInteger是java自帶的原子操作的類,調用unsafe的 public final int getAndAddInt(Object var1, long var2, int var4) ;
原创 AtomicLong和LongAdder的區別
前言 最近在看到不少框架裏面使用到了LongAdder這個類,而並非AtomicLong,很是困惑,於是專門看了LongAdder的源碼,總結一下這兩個的區別。 AtomicLong原理 就像我們所知道的那樣,AtomicLong
原创 Timer的scheduleAtFixedRate和schedule區別
Timer類 Timer類是進行任務調度的類,用來管理週期性任務的執行。 scheduleAtFxiedRate和schedule 在Timer類中有兩個方法用來提交週期性任務, public void schedule(Tim
原创 java守護線程
守護線程與非守護線程 JVM中存在兩種線程,用戶線程和守候線程。 所謂的守護線程,是指用戶線程在運行的時候後臺提供的一種通用服務的線程,比如用於垃圾回收的垃圾回收線程。 當一個線程由守護線程創建的時候它也是守護線程,當JV
原创 Log4j和Slf4j的關係
Log4j是具體的實現,而Slf4j提供了一系列抽象接口,開發者一般用Slf4j提供的API進行開發,而Slf4j則調用Log4j進行日誌的寫入
原创 代碼中小知識點
1.ArrayList.toArray(new T[size]);如果size大於ArrayList的大小的話,後面用null進行填充。
原创 ThreadLocal的使用與原理
1. 使用場景 使用單個線程保存上下文信息 可以使得本來線程不安全的類變得安全,例如DateFormat,如果每個線程只有一個DateFormat,那麼就是安全的 承載一些線程的信息,放在在方法調用的時候來回傳遞參數 2. 使用方法
原创 關於synchronized以及ReetrantLock、ReentrantReadWriteLock的選擇
synchronized和ReetrantLock的區別 synchronized是java的內置鎖,相對於ReetrantLock使用更加方便,如果實現自己的Lock,可以繼承ReetrantLock來實現,在性能上,兩個差異不是特
原创 java 多個線程之間錯誤處理
java之間多個線程的錯誤是不會傳遞的,當個線程運行拋出錯誤,別的線程是無法感知到的。
原创 AtomicLongFieldUpdater VSAtomicLong
AtomicLong AtomicLong是一個對象,因此我們創建的時候需要的內存大小(對象的大小+對象的引用); AtomicLongFieldUpdater AtomicLongFieldUpdater需要的內存大小爲(引用的
原创 jar包下的MANIFEST.MF文件
MANIFEST.MF 當我們在打包成jar包的時候,默認會產生一個MANIFEST.MF,這個文件包含了基本的信息,包含該jar包的版本,創建人等信息,如果是可運行jar包,那麼就會有main-class屬性,用來指定main函數所
原创 java 中一個char包含幾個字節
背景 char包含幾個字節可能記得在上學的時候書上寫的是2個字節,一直沒有深究,今天我們來探究一下到底一個char多少個字節? Char char在設計之初的時候被用來存儲字符,可是世界上有那麼多字符,如果有1個字節,那麼就意味着
原创 Void的使用場景
Void是什麼 Void是一個不可實例化的佔位符類用來保存引用代表了java裏面的關鍵字void的Class對象,那麼這個類的應用場景是什麼? Void的應用場景 應用場景有兩個: 任務返回值 在我們使用Future實現異
原创 Mysql的鎖
Mysql的鎖 在mysql中爲了支持併發,提供了兩種級別的鎖,行鎖和表鎖,行鎖併發性好但是加鎖需要的時間更久,表鎖併發性非常低但是加鎖快。在innodb存儲引擎中,行鎖鎖住的是索引,因此操作沒有索引的話,就會導致大量的表鎖,降低性能