原创 java併發編程-- 併發編程大合集
爲了方便各位網友學習以及方便自己複習之用,將Java併發編程系列內容系列內容按照由淺入深的學習順序總結如下,點擊相應的標題即可跳轉到對應的文章 【Java併發編程】實現多線程的兩種方法 【Java併發編程】線程的中
原创 java併發編程(七)--使用synchronized獲取互斥鎖的幾點說明
在併發編程中,多線程同時併發訪問的資源叫做臨界資源,當多個線程同時訪問對象並要求操作相同資源時,分割了原子操作就有可能出現數據的不一致或數據不完整的情況,爲避免這種情況的發生,我們會採取同步機制,以確保在某一時刻,方法內只允許有
原创 java併發編程(四)--守護線程與線程阻塞的四種情況
守護線程 Java中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護線程) 用戶線程即運行在前臺的線程,而守護線程是運行在後臺的線程。 守護線程作用是爲其他前臺線程的運行提供
原创 java併發編程(十)--多線程環境中安全使用集合API
在集合API中,最初設計的Vector和Hashtable是多線程安全的。例如:對於Vector來說,用來添加和刪除元素的方法是同步的。如果只有一個線程與Vector的實例交互,那麼,要求獲取和釋放對象鎖便是一種浪費,另外在不必
原创 java併發編程(二)-- 線程中斷
使用interrupt()中斷線程 當一個線程運行時,另一個線程可以調用對應的Thread對象的interrupt()方法來中斷它,該方法只是在目標線程中設置一個標誌,表示它已經被中斷,並立即返回。這裏需要注意的是,如果只是單
原创 Java基礎知識--內部類
之前看項目的代碼中有使用到內部類的情況,但是不理解爲什麼要用內部類這種生僻而難以理解的語法,沒有領悟到內部類的真正意義所在,故而在這裏說下內部類的幾種形式、用途以及使用方式 內部類定義 將一個類的定義放在另一個類內部,就是內部類。跟組合不
原创 java併發編程(一)--Runnable和Thread實現多線程的區別
Java中實現多線程有兩種方法:繼承Thread類、實現Runnable接口,在程序開發中只要是多線程,肯定永遠以實現Runnable接口爲主,因爲實現Runnable接口相比繼承Thread類有如下優勢: 1、可以避
原创 java併發編程(十三)--線程間協作:wait、notify、notifyAll
在Java中,可以通過配合調用Object對象的wait()方法和notify()方法或notifyAll()方法來實現線程間的通信。在線程中調用wait()方法,將阻塞等待其他線程的通知(其他線程調用notify()方法或not
原创 java併發編程(十五)--線程間通信中notifyAll造成的早期通知問題
如果線程在等待時接到通知,但線程等待的條件還不滿足,此時,線程接到的就是早期通知,如果條件滿足的時間很短,但很快又改變了,而變得不再滿足,這時也將發生早期通知。這種現象聽起來很奇怪,下面通過一個示例程序來說明問題。 很
原创 java併發編程(五)--volatile變量修飾符—意料之外的問題
volatile用處說明 在JDK1.2之前,Java的內存模型實現總是從主存(即共享內存)讀取變量,是不需要進行特別的注意的。而隨着JVM的成熟和優化,現在在多線程環境下volatile關鍵字的使用變得非常重要。
原创 java併發編程(十一)--死鎖
當線程需要同時持有多個鎖時,有可能產生死鎖。考慮如下情形: 線程A當前持有互斥所鎖lock1,線程B當前持有互斥鎖lock2。接下來,當線程A仍然持有lock1時,它試圖獲取lock2,因爲線程B正持有lock2,因
原创 java基礎知識(四)--泛型
我們知道,使用變量之前要定義,定義一個變量時必須要指明它的數據類型,什麼樣的數據類型賦給什麼樣的值。假如我們現在要定義一個類來表示座標,要求座標的數據類型可以是整數、小數和字符串,例如: x = 10、y = 10x = 12.88、y
原创 java併發編程(八)--synchronized的另個一重要作用:內存可見性
加鎖(synchronized同步)的功能不僅僅侷限於互斥行爲,同時還存在另外一個重要的方面:內存可見性。我們不僅希望防止某個線程正在使用對象狀態而另一個線程在同時修改該狀態,而且還希望確保當一個線程修改了對象狀態後,其他線程
原创 java併發編程(三)--線程掛起、恢復與終止的正確方法
掛起和恢復線程 Thread 的API中包含兩個被淘汰的方法,它們用於臨時掛起和重啓某個線程,這些方法已經被淘汰,因爲它們是不安全的,不穩定的。如果在不合適的時候掛起線程(比如,鎖定共享資源時),此時便可能會發生死鎖條件——其
原创 java進階(三)-- 類型信息與反射機制
前段時間在看《Thinking in java》,由於之前一直都在寫業務代碼,包括交易、對賬、銀行利息理財等等,忽略了對底層支撐代碼的研究,每次看到反編譯出來的依賴工程後總會遇到一些類型信息的代碼,也沒有深入去研究,看