Time of Update: 2017-02-28
一直以來的多線程的基礎總結都是脫離應用的,但是要說多線程的應用就不能不說Mina。Apache Mina作為一個高效能的Java非同步並髮網 絡通訊架構,其內部的多線程的設計和實現可謂是學習多線程的良藥。手上的Mina源碼是svn剪下來的最新的代碼,mvn轉化成eclipse項目 後匯入mina-core的源碼看看多線程的應用吧。首先簡單的介紹在org.apache.mina.core.service包裡的核心介面之一:IoService。這個介面是對於伺服器端接收串連和用戶端發起連
Time of Update: 2017-02-28
說到ReentrantReadWriteLock,首先要做的是與ReentrantLock劃清界限。它和後者都是單獨的實現,彼此之間沒有繼承或實現的關係。 然後就是總結這個鎖機制的特性了:(a).重入方面其內部的WriteLock可以擷取ReadLock,但是反過來ReadLock想要獲得WriteLock則永遠都不要想。(b).WriteLock可以降級為ReadLock,順序是:先獲得WriteLock再獲得ReadLock,然後釋放WriteLock,這時候線程將保持Readlock的持
Time of Update: 2017-02-28
Java
Time of Update: 2017-02-28
對於項目開發來說,資料庫是佔據著相當重要的一個環節。這節內容圍繞一個關於資料庫操作的程式來展開,包括添加、修改、刪除和查詢(簡稱CRUD)幾種操作這兒給出程式的題目:對新聞標題進行CRUD的操作。一 .
Time of Update: 2017-02-28
如果沒有用來讀取註解的方法和工作,那麼註解也就不會比注釋更有用處了。使用註解的過程中, 很重要的一部分就是建立於使用註解處理器。Java SE5擴充了反射機制的API,以協助程式員快速的構 造自訂註解處理器。註解處理器類庫(java.lang.reflect.AnnotatedElement):Java 使用Annotation介面來代表程式元素前面的註解,該介面是所有Annotation類型的父介面。除此之外, Java在java.lang.reflect
Time of Update: 2017-02-28
什麼是註解(Annotation):Annotation(註解)就是Java提供了一種元程式中的元素關聯 任何資訊和著任何中繼資料(metadata)的途徑和方法。Annotion(註解)是一個介面,程式可以通過反射 來擷取指定程式元素的Annotion對象,然後通過Annotion對象來擷取註解裡面的中繼資料。Annotation(註解)是JDK5.0及以後版本引入的。它可以用於建立文檔,跟蹤代碼中的依賴性,
Time of Update: 2017-02-28
要深入學習註解,我們就必須能定義自己的註解,並使用註解,在定義自己的註解之前,我們就必須要瞭解Java為我們提供的元註解和相關定義註解的文法。元註解:元註解的作用就是負責註解其他註解。Java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其它
Time of Update: 2017-02-28
環境:VirtualBox4.1 + RedHat Linux 6a. 下載Tomcat for Linux下載地址:Apache Tomcat 6:http://tomcat.apache.org/download-60.cgiApache Tomcat 7:http://tomcat.apache.org/download-70.cgib. 製作包含
Time of Update: 2017-02-28
環境:VirtualBox4.1 + RedHat Linux 6說明:必須在圖形介面安裝a. 下載 MyEclipse下載地址:MyEclipse6.0 linux版下載http://downloads.myeclipseide.com/downloads/products/eworkbench/6.0.1GA/MyEclipse_6 _0_1GA_E3_3_1_Installer.binMyEclipse7.5
Time of Update: 2017-02-28
環境:VirtualBox 4.1 +RedHat Linux 6a.下載JDKJavaSE 6下載:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive- downloads-javase6-419409.htmlJavaSE 7下載:http://www.oracle.com/technetwork/java/java-archive-downloads-javase7-
Time of Update: 2017-02-28
串連池是非常好的想法,應用很普遍。自己寫一個資料庫連接池,並不像想象中那樣困難。一般系統對串連池的功能不會有太多要求,使用自己的串連池未必是個壞主意。下面以Oracle為例,但是對Teradata和Greenplum也是可行的。另外我還實現了串連有效性檢查(checkConn)和恢複串連(resetConn)的方法。本例編程採用的是JRE1.4.2環境(別忘了準備訪問資料庫的jar包)。有任何問題請隨時留言,歡迎探討。在Oracle內建立測試資料:drop table my_table;
Time of Update: 2017-02-28
背景介紹:1)encodeURIComponent和decodeURIComponent在前端使用2)URLEncoder.encode和URLDecoder.decode在後台使用知識點:1)encodeURIComponent和URLEncoder.encode的區別在於前者對下面五個符號不編碼! %21 ' %27 ( %28 ) %29 ~
Time of Update: 2017-02-28
五、你有我有全都有—— ThreadLocal如何解決並發安全性?前面我們介紹了Java當中多個線程搶佔一個共用資源的問題。但不論是同步還是重入鎖,都不能實實在在的解決資源緊缺的情況,這些 方案只是靠制定規則來約束線程的行為,讓它們不再拚命的爭搶,而不是真正從實質上解決他們對資源的需求。在JDK 1.2當中,引入了java.lang.ThreadLocal。它為我們提供了一種全新的思路來解決線程並發的問題。但是他的名字難免讓我們望
Time of Update: 2017-02-28
四、協作,互斥下的協作——Java多線程協作(wait、notify、notifyAll)Java監視器支援兩種線程:互斥和協作。前面我們介紹了採用對象鎖和重入鎖來實現的互斥。這一篇中,我們來看一看線程的協作。舉個例子:有一家漢堡店舉辦吃漢堡比賽,決賽時有3個顧客來吃,3個廚師來做,一個服務員負責協調漢堡的數量。為了避免浪費,制 作好的漢堡被放進一個能裝有10個漢堡的長條狀容器中,按照先進先出的原則取漢堡。如果容器被裝滿,則廚師停止做漢堡,如果顧客發
Time of Update: 2017-02-28
【2. Fair or Unfair It is a question...】讓我們繼續前面有關ReentrantLock的話題。首先,ReentrantLock有一個帶布爾型參數的建構函式,在JDK官方文檔中對它是這樣描 述的:“此類的構造方法接受一個可選的公平 參數。當設定為 true 時,在多個線程的爭用下,這些鎖傾向於將訪問權授予等待時間 最長的線程。否則此鎖將無法保證任何特定訪問順序。與採用預設設定(使用不公平鎖)相比,使用公平鎖的程式在許多線程訪問時表現
Time of Update: 2017-02-28
在上一節中,我們已經瞭解了Java多線程編程中常用的關鍵字synchronized,以及與之相關的對象鎖機制。這一節中,讓我們一起來認 識JDK 5中新引入的並發架構中的鎖機制。我想很多購買了《Java程式員面試寶典》之類圖書的朋友一定對下面這個面試題感到非常熟悉:問:請對比synchronized與java.util.concurrent.locks.Lock
Time of Update: 2017-02-28
在上一篇中,我們講到了多線程是如何處理共用資源的,以及保證他們對資源進行互斥訪問所依賴的重要機制:對象鎖。本篇中,我們來看一看傳統的同步實現方式以及這背後的原理。很多人都知道,在Java多線程編程中,有一個重要的關鍵字,synchronized。但是很多人看到這個東西會感到困惑:“都說同步機制是 通過對象鎖來實現的,但是這麼一個關鍵字,我也看不出來Java程式鎖住了哪個對象阿?“沒錯,我一開始也是對這個問題感到困惑和不解。不過還好,我們有下面的這個常式:1 public
Time of Update: 2017-02-28
眾所周知,在Java多線程編程中,一個非常重要的方面就是線程的同步問題。關於線程的同步,一般有以下解決方案:1. 在需要同步的方法的方法簽名中加入synchronized關鍵字。2. 使用synchronized塊對需要進行同步的程式碼片段進行同步。3. 使用JDK 5中提供的java.util.concurrent.lock包中的Lock對象。另外,為瞭解決多個線程對同一變數進行訪問時可能發生的安全性問題,我們不僅可以採用同步機制,更可以通過JDK 1.2中加入的
Time of Update: 2017-02-28
在程式中實現交換兩個數的功能並不複雜,但如果不使用中間變數,就需要動一下腦筋。在本文介紹了兩個方法(其實原理都是一個) 。其基本原理就是數的中和。 也就是說,通過某種運算(二元運算)將a和b兩個數變成一個數,並儲存在其中一個變數中。然後再通過同 樣的運算子將a或b中和掉。這樣實際上是利用了a或 b本身作為了中間變數。先看第一個演算法。static class Num{ int a; int b;}public static void swap1(Num num){
Time of Update: 2017-02-28
Java的效能有某種黑魔法之稱。部分原因在於Java平台非常複雜,很多情況下問題難以定位。然而在曆史上還有一種趨 勢,人們靠智慧和經驗來研究Java效能,而不是靠應用統計和實證推理。在這篇文章中,我希望拆穿一些最荒謬的技術神話 。1.Java很慢關於Java的效能有很多謬論,這一條是最過時的,可能也是最為明顯的。確實,在上 世紀90年代和本世紀初處,Java有時是很慢。然而從那以後,虛擬機器和JIT技術已經有了十多年的改進,Java的整體 效能現在已經非常好了。在6個獨立的Web效能基準測試中,