原创 Java併發編程:線程間協作的兩種方式:wait、notify和Condition
在前面我們將了很多關於同步的問題,然而在現實中,需要線程之間的協作。比如說最經典的生產者-消費者模型:當隊列滿時,生產者需要等待隊列有空間才能繼續往裏面放入商品,而在等待的期間內,生產者必須釋放對臨界資源(即隊列)的佔用權。因爲生產者如
原创 緩存算法(頁面置換算法)-FIFO、LFU、LRU
1. FIFO -- 先進先出 如果一個數據最先進入緩存中,則應該最早淘汰掉。也就是說,當緩存滿的時候,應當把最先進入緩存的數據給淘汰掉。 實現: 利用一個雙向鏈表保存數據,當來了新的數據之後便添加到鏈表末尾,如果Cache存滿數
原创 java線程內存模型,線程、工作內存、主內存
java線程內存模型 線程、工作內存、主內存三者之間的交互關係圖: key edeas 所有線程共享主內存 每個線程有自己的工作內存 refreshing local memory to/from main memo
原创 數據庫分庫分表(sharding)系列(五) 一種支持自由規劃無須數據遷移和修改路由代碼的Sharding擴容方案
作爲一種數據存儲層面上的水平伸縮解決方案,數據庫Sharding技術由來已久,很多海量數據系統在其發展演進的歷程中都曾經歷過分庫分表的Sharding改造階段。簡單地說,Sharding就是將原來單一數據庫按照一定的規則進行切分,把數據
原创 理解java多態的面試題(理解加粗的樣例解析部分)
class A{ public String show(D obj){ return ("A and D"); } public String show(A obj){
原创 支付系統對賬算法優化方案
一、目前對賬的算法: 1、從上游渠道(銀行、銀聯等金融機構)獲取對賬文件,程序逐行解析入庫 2、在存儲過程中,以上游對賬文件的表爲基準,程序逐行讀取並與我們系統的交易記錄/賬務記錄(有賬務系統情況下,合理方案應該是於賬務記錄)對比,
原创 Java靜態方法不具有多態性詳解
動態綁定機制使得基類的引用能夠指向正確的子類對象,從而使得面向基類編程成爲可能。 然而動態綁定在以下兩種情況會失效。 1、基類方法是private或final修飾的 這個很好理解,因爲private說明該方法對子類是不可見的,子類
原创 ReentrantLock公平鎖與非公平鎖
總括: 在Java的ReentrantLock構造函數中提供了兩種鎖:創建公平鎖和非公平鎖(默認)。代碼如下: public ReentrantLock() { sync = ne
原创 代理模式 適配器模式 外觀模式 裝飾模式 區別 比較
代理模式 1 代理模式中的原類和代理類繼承同一父類; 2 原類對象與代理類對象接口相同,功能一致; 3 起到了隱藏原類的作用。 適配器模式 1 只有適配器繼承目標接口; 2 講原有類接口轉換爲目標代碼需求的接口。
原创 【Java線程】Java內存模型總結
學習資料:http://www.infoq.com/cn/articles/Java-memory-model-1 Java的併發採用的是共享內存模型(而非消息傳遞模型),線程之間共享程序的公共狀態,線程之間通過寫-讀內存中的公共
原创 Thread的中斷機制(interrupt)
先看收集了別人的文章,全面的瞭解下java的中斷: 中斷線程 線程的thread.interrupt()方法是中斷線程,將會設置該線程的中斷狀態位,即設置爲true,中斷的結果線程是死亡、還是等待新的任務或是繼續運行至下一步,就取決
原创 多態經典面試題解析
多態經典面試題 已知類ABCD,B繼承於A,C和D繼承於B,具體如下 [html] view plain copy public class A { public void print(A a){
原创 java併發(十二)飢餓和公平
如果一個線程因爲CPU時間全部被其他線程搶走而得不到CPU運行時間,這種狀態被稱之爲“飢餓”。而該線程被“飢餓致死”正是因爲它得不到CPU運行時間的機會。解決飢餓的方案被稱之爲“公平性” – 即所有線程均能公平地獲得運行機會。 下面是本文
原创 JAVA多線程之wait/notify
本文主要學習JAVA多線程中的 wait()方法 與 notify()/notifyAll()方法的用法。 ①wait() 與 notify/notifyAll 方法必須在同步代碼塊中使用 ②wait() 與 notify/not
原创 遞歸算法轉換爲非遞歸算法
遞歸算法實際上是一種分而治之的方法,它把複雜問題分解爲簡單問題來求解。對於某些複雜問題(例如hanio塔問題),遞歸算法是一種自然且合乎邏輯的解決問題的方式,但是遞歸算法的執行效率通常比較差。因此,在求解某些問題時,常採用遞歸算法