原创 設計模式--超詳細 手動實現 jdk動態代理 原理(4)

在前幾篇文章中,我們通過指出靜態代理的不足及弊端,引申出了動態代理,然後一步步的對代碼進行優化。那麼在jdk中的動態代理究竟是什麼樣子呢?本篇我們就來使用jdk的動態代理,並在使用的過程中比較一下和我們實現的動態代理有哪些區別。 首先我們

原创 java 線程安全問題以及使用synchronized解決線程安全問題的幾種方式

一、線程安全問題產生的原因 我們使用java多線程的時候,最讓我們頭疼的莫過於多線程引起的線程安全問題,那麼線程安全問題到底是如何產生的呢?究其本質,是因爲多條線程對同一份數據進行讀、寫操作的過程中,不符合原子性。所謂原子性,就是

原创 設計模式--超詳細 手動實現 jdk動態代理 原理(1)

前言 jdk動態代理想必大家都不陌生,它是面向切面編程(AOP)的理論基礎,可以說當我們徹底搞清了jdk動態代理後,對aop的一些實際應用會有一個更深層次的理解,比如spring中的事務、日誌管理、權限管理等。 我會通過幾篇文章來由淺入深

原创 設計模式--超詳細 手動實現 jdk動態代理 原理(2)

上一篇講了靜態代理,我們發現靜態代理需要顯式的編寫代理類,並且同樣的代理功能(比如加日誌),需要橫向重複編寫(即針對每個類型的接口都要使用相同代碼進行實現),這會讓項目整體變得十分臃腫,肯定不可取。我們來列舉一下靜態代理的弊端: 橫向:需

原创 設計模式--超詳細 手動實現 jdk動態代理 原理(3)

在上一篇中,我們通過IO將文件寫出的方式,實現了用戶可以無感知的獲取到代理對象,但是在上一篇的最後我們也提出了這種實現方式不靈活的地方,這兩個點是必須要改進的,否則也就無法稱之爲“動態”代理。 改進1:動態生成用戶所需類型的代理對象 我們

原创 Java中volatile關鍵字的作用

由一段代碼引出的問題 我們先來看這樣一段簡單的代碼: public class VolatileThread implements Runnable{ private boolean flag = true;

原创 設計模式--jdk動態代理(1)

前言 jdk動態代理想必大家都不陌生,它是面向切面編程(AOP)的理論基礎,可以說當我們徹底搞清了jdk動態代理後,對aop的一些實際應用會有一個更深層次的理解,比如spring中的事務、日誌管理、權限管理等。 我會通過幾篇文章來由淺入深

原创 學習筆記之設計模式(1)--單例設計模式

    說起單例設計模式,只要是學過編程的應該可以說是無人不知了,學習和了解設計模式也大多從單例開始,你可能會把單例模式的代碼很流利的寫出來,但你真的瞭解單例設計模式嗎?下面我將通過問題的引入,一步一步帶大家瞭解單例設計模式。一、爲什麼要

原创 分門別類總結Java中的各種鎖,讓你徹底記住

前言本文需要具備一定的多線程基礎才能更好的理解。學習java多線程時,最頭疼的知識點之一就是java中的鎖了,什麼互斥鎖、排它鎖、自旋鎖、死鎖、活鎖等等,細分的話可以羅列出20種左右的鎖,光是看着這些名字就足以讓人望而卻步了,更別說一個個