原创 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塔問題),遞歸算法是一種自然且合乎邏輯的解決問題的方式,但是遞歸算法的執行效率通常比較差。因此,在求解某些問題時,常採用遞歸算法