原创 Java多線程編程(7)--線程組與線程工廠

一.線程組   實際上,線程組是一個設計失敗的概念。它最初是出於安全的考慮被設計用來隔離不同的applet(已過時)的。然而,ThreadGroup並未實現這一預期目標,並且它所實現的許多方法是有缺陷的。但是ThreadGroup仍然遺留在

原创 Java多線程編程(6)--線程間通信(下)

  因爲本文的內容大部分是以生產者/消費者模式來進行講解和舉例的,所以在開始學習本文介紹的幾種線程間的通信方式之前,我們先來熟悉一下生產者/消費者模式。   在實際的軟件開發過程中,經常會碰到如下場景:某個模塊負責產生數據(可能是消息、文件

原创 Java基礎教程(25)--I/O

一.I/O流   I/O流表示輸入源或輸出目標。流可以表示許多不同類型的源和目標,例如磁盤文件、設備、其他程序等。   流支持許多不同類型的數據,包括字節、原始數據類型、字符和對象等。有些流只傳遞數據; 有些流則可以操縱和轉換數據。   無

原创 Java多線程編程(5)--線程間通信(上)

一.等待與通知   某些情況下,程序要執行的操作需要滿足一定的條件(下文統一將其稱之爲保護條件)才能執行。在單線程編程中,我們可以使用輪詢的方式來實現,即頻繁地判斷是否滿足保護條件,若不滿足則繼續判斷,若滿足則開始執行。但在多線程編程中,這

原创 Java多線程編程(4)--線程同步機制

一.鎖 1.鎖的概念   線程安全問題的產生是因爲多個線程併發訪問共享數據造成的,如果能將多個線程對共享數據的併發訪問改爲串行訪問,即一個共享數據同一時刻只能被一個線程訪問,就可以避免線程安全問題。鎖正是基於這種思路實現的一種線程同步機制。

原创 Java多線程編程(3)--線程安全性

一.線程安全性   一般而言,如果一個類在單線程環境下能夠運作正常,並且在多線程環境下,在其使用方不必爲其做任何改變的情況下也能運作正常,那麼我們就稱其是線程安全的。反之,如果一個類在單線程環境下運作正常而在多線程環境下則無法正常運作,那麼

原创 Java多線程編程(2)--多線程編程的術語與概念

一.串行、併發和並行   爲了更清楚地解釋這三個概念,我們來舉一個例子。假設我們有A、B、C三項工作要做,那麼我們有以下三種方式來完成這些工作:   第一種方式,先開始做工作A,完成之後再開始做工作B,以此類推,知道完成工作C。在這種情況

原创 Java多線程編程(1)--走進Java世界中的線程

一.程序、進程和線程   程序是一組指令的有序集合,也可以將其通俗地理解爲若干行代碼。它本身沒有任何運行的含義,它只是一個靜態的實體,它可能只是一個單純的文本文件,也有可能是經過編譯之後生成的可執行文件。   從狹義來說,進程是正在運行的程

原创 Java基礎教程(26)--反射

一.類   對於每一種類型的對象,Java虛擬機都會實例化一個java.lang.Class類的不可變實例。該實例提供了獲取對象的運行時屬性的方法,包括它的成員和類型信息。Class類還提供了創建新實例的方法。最重要的是,它是所有反射API

原创 Java基礎教程(25)--I/O流

  I/O流表示輸入源或輸出目標。流可以表示許多不同類型的源和目標,例如磁盤文件、設備、其他程序等。   流支持許多不同類型的數據,包括字節、原始數據類型、字符和對象等。有些流只傳遞數據; 有些流則可以操縱和轉換數據。   無論各種流的內部

原创 Java基礎教程(24)--集合

一.Java集合框架   集合,有時也稱爲容器,是一個用來存儲和管理多個元素的對象。Java中的集合框架定義了一套規範,用來表示和操作集合,使具體操作與實現細節解耦。集合框架都包含下列內容: 接口:這些是表示集合的抽象數據類型,它們定義了

原创 Java基礎教程(23)--lambda表達式

一.初識lambda表達式 1.定義   lambda表達式是一個可傳遞的代碼塊,或者更確切地說,可以把lambda表達式理解爲簡潔地表示可傳遞的匿名方法的一種方式。它沒有名稱,但它有參數列表、函數主體和返回類型。下面闡述了lambda表達

原创 Java基礎教程(22)--異常

一.什麼是異常   異常就是發生在程序的執行期間,破壞程序指令的正常流程的事件。當方法中出現錯誤時,該方法會創建一個對象並將其交給運行時系統。該對象稱爲異常對象,它包含有關錯誤的信息,包括錯誤的類型和出現錯誤時程序的狀態。創建異常對象並將其

原创 Java基礎教程(21)--泛型

一.爲什麼使用泛型   泛型意味着編寫的代碼可以被很多不同類型的對象所重用。例如,我們不希望爲存放String和Integer對象的集合設計不同的類。現在的ArrayList類可以存放任何類型的對象,但是在Java中增加泛型之前已經有了一個

原创 Java基礎教程(20)--數字和字符串

一.數字   在用到數字時,大多數情況下我們都會使用基本數據類型。例如: int i = 500; float gpa = 3.65f; byte mask = 0xff;   然而,有時候我們既需要用到數字又需要用到對象。Java爲每個基