原创 Java併發編程:併發容器之CopyOnWriteArrayList

  Copy-On-Write簡稱COW,是一種用於程序設計中的優化策略。其基本思路是,從一開始大家都在共享同一個內容,當某個人想要修改這個內容的時候,纔會真正把內容Copy出去形成一個新的內容然後再改,這是一種延時懶惰策略。從J

原创 Java併發編程:CountDownLatch、CyclicBarrier和Semaphore

  在java 1.5中,提供了一些非常有用的輔助類來幫助我們進行併發編程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我們就來學習一下這三個輔助類的用法。   以下是本文目錄大綱:   

原创 Java併發編程:Timer和TimerTask

  其實就Timer來講就是一個調度器,而TimerTask呢只是一個實現了run方法的一個類,而具體的TimerTask需要由你自己來實現,例如這樣:    Timer timer = new Timer(); timer.s

原创 Java線程面試題 Top 50

  不管你是新程序員還是老手,你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就是內置了對併發的支持,讓Java大受企業和程序員的歡迎。大多數待遇豐厚的Java開發職位都要求開發者精通多線程技術並且有豐富的Java程

原创 Java併發編程:同步容器

  爲了方便編寫出線程安全的程序,Java裏面提供了一些線程安全類和併發工具,比如:同步容器、併發容器、阻塞隊列、Synchronizer(比如CountDownLatch)。今天我們就來討論下同步容器。   以下是本文的目錄大綱

原创 Java併發編程:線程池的使用

  在前面的文章中,我們使用線程的時候就去創建一個線程,這樣實現起來非常簡便,但是就會有一個問題:   如果併發的線程數量很多,並且每個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低系統的效率,因爲頻繁創建線

原创 Java併發編程:併發容器之ConcurrentHashMap

  JDK5中添加了新的concurrent包,相對同步容器而言,併發容器通過一些機制改進了併發性能。因爲同步容器將所有對容器狀態的訪問都 串行化了,這樣保證了線程的安全性,所以這種方法的代價就是嚴重降低了併發性,當多個線程競爭容

原创 Java併發編程:深入剖析ThreadLocal

  想必很多朋友對ThreadLocal並不陌生,今天我們就來一起探討下ThreadLocal的使用方法和實現原理。首先,本文先談一下對ThreadLocal的理解,然後根據ThreadLocal類的源碼分析了其實現原理和使用需要

原创 Java ConcurrentModificationException異常原因和解決方法

  在前面一篇文章中提到,對Vector、ArrayList在迭代的時候如果同時對其進行修改就會拋出java.util.ConcurrentModificationException異常。下面我們就來討論以下這個異常出現的原因以及

原创 Java併發編程:阻塞隊列

  在前面幾篇文章中,我們討論了同步容器(Hashtable、Vector),也討論了併發容器(ConcurrentHashMap、CopyOnWriteArrayList),這些工具都爲我們編寫多線程程序提供了很大的方便。今天我

原创 Java併發編程:Thread類的使用

  在前面2篇文章分別講到了線程和進程的由來、以及如何在Java中怎麼創建線程和進程。今天我們來學習一下Thread類,在學習Thread類之前,先介紹與線程相關知識:線程的幾種狀態、上下文切換,然後接着介紹Thread類中的方法

原创 Java併發編程:Lock

  在上一篇文章中我們講到了如何使用關鍵字synchronized來實現同步訪問。本文我們繼續來探討這個問題,從Java 5之後,在java.util.concurrent.locks包下提供了另外一種方式來實現同步訪問,那就是L

原创 JAVA多線程和併發基礎面試問答

  多線程和併發問題是Java技術面試中面試官比較喜歡問的問題之一。在這裏,從面試的角度列出了大部分重要的問題,但是你仍然應該牢固的掌握Java多線程基礎知識來對應日後碰到的問題。(校對注:非常贊同這個觀點)      Jav

原创 Java併發編程:Callable、Future和FutureTask

  在前面的文章中我們講述了創建線程的2種方式,一種是直接繼承Thread,另外一種就是實現Runnable接口。   這2種方式都有一個缺陷就是:在執行完任務之後無法獲取執行結果。   如果需要獲取執行結果,就必須通過共享變量或

原创 Java併發編程:synchronized

  雖然多線程編程極大地提高了效率,但是也會帶來一定的隱患。比如說兩個線程同時往一個數據庫表中插入不重複的數據,就可能會導致數據庫中插入了相同的數據。今天我們就來一起討論下線程安全問題,以及Java中提供了什麼機制來解決線程安全問