原创 深入學習java併發編程:CountDownLatch、CyclicBarrier

      在java併發包中提供了一些非常有用的輔助類來幫助我們進行併發編程,這些類包括CountDownLatch、CyclicBarrier以及Semaphore。 1、CountDownLatch 1 ) 類圖    2)Co

原创 java多線程HTTP服務器

       基於java線程池、java Socket實現了一個簡單的多線程Http服務器,可以實現GET資源獲取功能、GET表單提交功能,POST  表單提交功能、單文件上傳功能。    源碼可以在此下載:http://downloa

原创 深入學習java併發編程:內存模型(五)鎖

鎖的釋放-獲取建立的happens before 關係 鎖是java併發編程中最重要的同步機制。鎖除了讓臨界區互斥執行外,還可以讓釋放鎖的線程向獲取同一個鎖的線程發送消息。下面是鎖釋放-獲取的示例代碼: class MonitorExa

原创 Java虛擬機(一):Java內存區域與內存溢出異常

1、Java內存區域       由圖可知,java運行時內存區域主要劃分爲6個區域,分別爲程序計數器、Java虛擬機盞、本地方法盞、Java堆、方法區(內含運行時常量池)、和直接內存區(分配空間時直接在本地堆中分配)。 (1)、程序

原创 深入學習java併發編程:內存模型(三)順序一致性

數據競爭與順序一致性保證 當程序未正確同步時,就會存在數據競爭。java內存模型規範對數據競爭的定義如下: 在一個線程中寫一個變量,在另一個線程讀同一個變量,而且寫和讀沒有通過同步來排序。 當代碼中包含數據競爭時,程序的執行往往產生違

原创 Java虛擬機(二):垃圾收集器

      程序計數器、虛擬機棧、本地方法棧3個區域隨線程而生,隨線程而滅,在這幾個區域內就不需要過多考慮垃圾回收的問題,因爲方法結束或者線程結束時,內存自然就跟隨着回收了。 棧中的棧幀隨着方法的進入和退出而有條不紊的執行這出棧和入棧操作

原创 Java虛擬機(七)虛擬機字節碼執行引擎

     在不同的虛擬機實現裏面,執行引擎在執行Java代碼時可能會有解釋執行(通過解釋器執行)和編譯執行(通過即時編譯產生本地代碼執行)兩種選擇,也可能兩者兼備,甚至可以包含幾個不同級別的編譯器執行引擎。但是從外觀上看,所有的Java虛

原创 Java虛擬機(四):Class文件結構及字節碼指令

一、Class文件結構     Java class文件是對Java程序二進制文件格式的精確定義。每一個Java class文件都對一個Java類或者Java接口作出了全面描述。一個class文件中只能包含一個類或者接口。 1、平臺

原创 深入學習java併發編程:內存模型(四)volatile

volatile的特性 當我們聲明共享變量爲volatile後,對這個變量的讀/寫將會很特別。理解volatile特性的一個好方法是:把對volatile變量的單個讀/寫,看成是使用同一個鎖對這些單個讀/寫操作做了同步。下面我們通過具體

原创 Java虛擬機(六):類加載器ClassLoader

    “通過一個類的全限定名來獲取描述此類的二進制流”這個動作放到虛擬機外部去實現,以便讓應用程序決定如何去獲取所需要的類。這個動作模塊就是類加載器。而程序在啓動的時候,並不會一次性加載程序所要用的所有class文件,而是根據程序的需要

原创 Java虛擬機(三):內存分配與回收策略

     對象的分配,就是在堆上,主要是新生代Eden區上分配對象空間,如果啓動了本地線程分配緩衝,將按照線程優先在TLAB上分配。少數情況下也可能分配在老年代中。 1、對象優先在Eden區分配      大多數情況對象在新生代Eden區

原创 設計模式概述

       設計模式是一套被反覆使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結,使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解並且保證代碼可靠性。        設計模式可分爲創建型、結構型、行爲型3種。其中,創建型主要

原创 Java虛擬機(五):虛擬機類加載

      虛擬機把描述類的數據從Class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這就是虛擬機的類加載機制。不同於那些需要進行連接工作的語言,在Java語言裏面,類型的加載、連接和

原创 JDK與設計模式:原型模式

1、原型模式      原型模式是指將一個對象作爲原型,對其進行復制、克隆,產生一個和原對象類似的對象。原型模式是一種創建型模式。      原型模式的工作原理很簡單:將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原

原创 深入學習java併發編程:線程池ThreadPoolExecutor實現以及使用

Java中的線程池是應用場景最多的併發編程模型,很多需要異步或併發執行任務的程序都可以使用線程池。在程序中合理的利用線程池能夠有如下好處:     1):降低資源消耗。通過重複利用已創建的線程降低線程創建以及銷燬造成的消耗。     2)