多線程環境下的程式調試是讓開發人員頭痛的問題。在 IDE 中通過添加斷點的 方式偵錯工具,往往會因為停在某一條線程的某個斷點上而錯失了其他線程的執 行,線程之間的調度往往無法預期,並且會因為斷點影響了實際的線程執行順序 。因此,在調試多線程程式時,開發人員往往會選擇列印 Trace Log 的方式來幫 助調試。使用 Log 來協助調試的問題在於,開發人員往往無法預期哪些關鍵點需要記錄 ,於是在整個程式的調試過程中,需要不斷的加入 Log 調用,編譯產生可執行
許多資料來源中都含有多餘資料或對儲存資訊無用的資料。這常常造成客戶機 和伺服器應用程式間或電腦間浩如煙海的資料轉送。很明顯,資料存放區和資訊傳 輸問題解決辦法是,安裝輔助儲存裝置並擴充現有的通訊裝置。然而,要做到這 一點,就需要增加組織的運行費用。減輕部分資料存放區和資訊傳輸的方法之一是, 以更有效代碼錶示資料。本文簡要介紹資料壓縮和解壓縮,以及如何有效地、方便地從JavaTM應用程式內部使用 java.util.zip包壓縮和解壓縮資料。雖然 WinZip、gzip和Java ARchive(
Java的事件模式是動態響應系統重要的基礎,在圖形介面領域的事件模式已經有很多文章介紹,但是在伺服器端我們會碰到更多的事件模式,這裡本人試圖總結一下:事件直接驅動模式事件模式的第一個要求就是效能的要求,需要直接而且快,Command模式是必須經常使用的,主要適合於迅速處理
面向方面編程(AOP)是項大有前途的新技術,但是採用新技術可能有風險( 當然,不 採用新技術也會有風險)。與所有的新技術一樣,通常來說,最好是 沿著一條可以管理風險的路徑來採用它們。如果用 AOP 來執行策略和測試,就 可以從 AOP 得到降低風險的好處。因為方面不會進入生產,所以不會出現技術 破壞代碼穩定性或開發過程的風險,但卻會有助於開發品質更好的軟體。用方面 進行測試也是學習方面的工作方式,並體驗這項激動人心的新技術的好方法。組合測試方法正如我在 第 1 部分 中討論過的,QA
在 Joshua Bloch 的那本出色的 Effective Java Programming Language Guide(參閱 參考資料)一書中,第 52 項的標題為“Document Thread Safety” ,在其中他懇請開發人員準確地記錄下類對執行緒安全性有哪些保證。就像 Bloch 書中的大多數建議一樣,這也是一個反覆提到、但很少實現的非常好的建議(就 像 Bloch 在其 Programming Puzzlers
十五年前,多處理器系統是高度專用系統,要花費數十萬美元(大多數具有 兩個到四個處理器)。現在,多處理器系統很便宜,而且數量很多,幾乎每個主 要微處理器都內建了多處理支援,其中許多系統支援數十個或數百個處理器。要使用多處理器系統的功能,通常需要使用多線程構造應用程式。但是正如 任何編寫並發應用程式的人可以告訴你的那樣,要獲得好的硬體利用率,只是簡 單地在多個線程中分割工作是不夠的,還必須確保線程確實大部分時間都在工作
Java Transaction Service 是 J2EE 架構的關鍵元素。它與 Java Transaction API 結合在一起,使我們能夠構建對於各種系統和網路故障都非常 健壯的分布式應用程式。事務是可靠應用程式的基本構建塊 —— 如果沒有事務 的支援,編寫可靠的分布式應用程式將是非常困難的。幸運的是,JTS 執行的大 部分工作對於程式員都是透明的;J2EE 容器使事務劃分和資源徵用對程式員來
當單線程應用程式中的主線程拋出一個未捕獲的異常時,因為控制台中會打 印堆疊追蹤(也因為程式停止),所以您很可能注意到。但在多線程應用程式中 ,尤其是在作為伺服器運行並且不與控制台相連的應用程式中,線程死亡可能成 為不太令人信服的事件,這會導致局部系統失敗,從而產生混亂的應用程式行為 。在 Java theory and practice十月份的專欄文章 中,我們研究了線程池, 並研究了編寫得不正確的線程池會如何“泄漏”線程,直到最終丟失所有線程。
這個月,我著手撰寫一篇文章,分析一個寫得很糟糕的微評測。畢竟,我們 的程式員一直受效能困擾,我們也都想瞭解我們編寫、使用或批評的代碼的效能 特徵。當我偶然間寫到效能這個主題時,我經常得到這樣的電子郵件:“我寫的 這個程式顯示,動態 frosternation 要比靜態 blestification 快,與您上一 篇的觀點相反!”許多隨這類電子郵件而來的所謂“評測“程式,或者它們運行 的方式,明顯表現出他們對於 JVM
當項目中需要 XML 解析器、文本索引程式和搜尋引擎、Regex編譯器、 XSL 處理器或 PDF 產生器時,我們中大多數人從不會考慮自己去編寫這些實用 程式。每當需要這些設施時,我們會使用商業實現或開放源碼實現來執行這些任 務原因很簡單 ― 現有實現工作得很好,而且便於使用,自己編寫這些公用程式 會事倍功半,或者甚至得不到結果。作為軟體工程師,我們更願意遵循艾薩克 ・牛頓的信念 ― 站在巨人的肩膀之上,有時這是可取的,但並不總是這 樣。(在 Richard Hamming 的
點擊上傳按鈕後,webwork的程式流如下:step 1)進入ServletDispatcher.servicepublic void service(HttpServletRequest request, HttpServletResponse response)throws ServletException {........request =
在剖析器出錯的原因時,瞭解它當時的狀態將是非常有用的。在許多情況下,我們可以通過堆棧追蹤實現此目的,但這些資訊經常都是停用,或者您需要的可能是程式在出錯時處理資料的相關資訊。傳統做法是使用 log4j 和 Java Logging API 等紀錄架構,然後再通過人工來編寫和維護所需的記錄語句。這種操作非常單調乏味且容易出錯,一般適合自動實現。Java 5 添加的 Java Instrumentation 機制允許您通過提供 "Java 代理" 來檢查和修改載入的類位元組代碼。
很多有關編程風格的建議都是為了建立高品質、可維護的代碼,這很合理, 因為最容易修複 bug 的時間就是在產生 bug 之前(少量的預防措施……)。遺 憾的是,只預防往往是不夠的,雖然有一些精巧的工具可以協助您建立好的代碼 ,但是很少有工具可以協助您分析、維護或提高現有代碼的品質。寫安全執行緒的類很難,而分析現有類的執行緒安全性更難,增強類使其仍然保 持安全執行緒也很難。以隱含假定、不變式以及預期用例(雖然在開發人員的頭腦
當您在 Java 中使用Regex時,依賴某一具體 regexp 庫通常不是個好 主意。如果使用抽象層,您可以在不同 regexp 庫之間切換,降低您的代碼與特 定庫之間的耦合,並能選擇哪個庫最適合您的需要。如果您正在考慮在下一個項 目中使用 Java regexp 庫,軟體開發人員 Jose San Leandro Armendariz 將向 您示範如何使代碼獨立於所選擇的具體庫。並讓您進一步瞭解 regexp 及其工作 原理,隨後還提供了一些練習。簡介儘管您可能認為編寫需要分析文本的
活躍了將近三年的 JSR 133,近期發布了關於如何修複 Java 記憶體模型 (Java Memory Model, JMM)的公開建議。在本系列文章的 第 1 部分,專欄作 者 Brian Goetz 主要介紹最初的 JMM 中的幾個嚴重缺陷,這些缺陷導致了一些 難度高得驚人的概念語義,這些概念原來被認為很簡單。這個月,他介紹在新 JMM 中 volatile 和 final 的語義是如何變化的,這些改變使它們的語義符合 大多數開發人員的直覺。其中一些改變已經在 JDK 1.4
Annotation在java的世界正鋪天蓋地展開,有空寫這一篇簡單的annotations的文章,算是關於Annotation入門的文章吧,希望能各位們能拋磚,共同學習......不講廢話了,實踐才是硬道理.第一部分:瞭解一下java1.5起預設的三個annotation類型:一個是@Override:只能用在方法之上的,用來告訴別人這一個方法是改寫父類的。一個是@Deprecated:建議別人不要使用舊的API的時候用的,編譯的時候會用產生警告資訊,可以設定在程式裡的所有的元素上.一個是@S
本文通過對 Eclipse 的SWT 和 Java Swing、Abstract Windows Toolkit (AWT)GUI 工具包進行比較,可以協助新應用程式的開發人員從中選擇適當的 工具。您可以通過本文瞭解對每個工具包的基本特性的介紹,以及使用 每個工具包的優缺點。簡介developerWorks 上另外一些作者已 經展示了如何在 Swing 和 SWT 之間很好地進行遷移(參見 參考資料)。本文 的目標是協助您在開始開發項目之前確定選擇使用哪個 GUI 工具包。但
實現實現是用來儲存物件集 的實際資料對象,它實現了在前面的章節中所描述的 核心 對象集 介面 。以下章節將描述三種實現:通用實現通用實現是公用類,它提供核心對象集介面的主要實現。封裝器實現封裝器實現與其它實現(通常為通用實現)一起提供附加功能。便利實現便利實現是小型實現,通常可通過靜態方法(static factory methods)獲得,它可方便、高效地為特殊 對象集 (象 singleton sets)替代通用實現。另外,根據JDK的abstract
每個Java對象都有hashCode()和 equals()方法。許多類忽略(Override)這 些方法的預設實施,以在對象執行個體之間提供更深層次的語義可比性。在Java理念 和實踐這一部分,Java開發人員Brian Goetz向您介紹在建立Java類以有效和准 確定義hashCode()和equals()時應遵循的規則和指南。您可以在討論論壇與作者 和其它讀者一同探討您對本文的看法。(您還可以點擊本文頂部或底部的討論進 入論壇。)雖然Java語言不直接支援關聯陣列 --
1. java.lang.String 的 split() 方法, JDK 1.4 or latersplitpublic String[] split(String regex,int limit)根據匹配給定的Regex來拆分此字串。此方法返回的數組包含此字串的每個子字串,這些子字串由另一個匹配給定的運算式的子字串終止或由字串結束來終止。數組中的子字串按它們在此字串中的順序排列。如果運算式不匹配輸入的任何部分,則結果數組只具有一個元素,即此字串。limit