多線程學習

1. volatile關鍵字

可見,但不原子,參考:http://www.ibm.com/developerworks/cn/java/j-jtp06197.htmlhtml

2. Atomic原子性

java.util.concurrent中的原子變量,參考:java

http://blog.csdn.net/vernonzheng/article/details/8206349編程

常見的參考ConcurrentHashMap深刻分析緩存

3. synchronized關鍵字

三種級別的鎖定:http://blog.csdn.net/lxgwm2008/article/details/8533102多線程

volatile和synchronized的區別與聯繫Synchronize 和 Lock 的區別與用法工具

4. ReentrantLock與Condition

ReentrantLock性能好,可是synchronized好編程,具體看對比性能

5. 線程池

Java裏面線程池的頂級接口是Executor,可是嚴格意義上講Executor並非一個線程池,而只是一個執行線程的工具。真正的線程池接口是ExecutorService操作系統

ExecutorService在Executor的基礎上增長了一些方法,其中有兩個核心的方法:.net

  • Future<?> submit(Runnable task)
  • <T> Future<T> submit(Callable<T> task)

這兩個方法都是向線程池中提交任務,它們的區別在於Runnable在執行完畢後沒有結果,Callable執行完畢後有一個結果。這在多個線程中傳遞狀態和結果是很是有用的。另外他們的相同點在於都返回一個Future對象。Future對象能夠阻塞線程直到運行完畢(獲取結果,若是有的話),也能夠取消任務執行,固然也可以檢測任務是否被取消或者是否執行完畢。線程

submit()和execute()的區別 ExecutorService中submit和execute的區別

Executors類裏面提供了一些靜態工廠,生成一些經常使用的線程池

  • newSingleThreadExecutor:建立一個單線程的線程池。這個線程池只有一個線程在工做,也就是至關於單線程串行執行全部任務。若是這個惟一的線程由於異常結束,那麼會有一個新的線程來替代它。此線程池保證全部任務的執行順序按照任務的提交順序執行。
  • newFixedThreadPool:建立固定大小的線程池。每次提交一個任務就建立一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,若是某個線程由於執行異常而結束,那麼線程池會補充一個新線程。
  • newCachedThreadPool:建立一個可緩存的線程池。若是線程池的大小超過了處理任務所須要的線程,那麼就會回收部分空閒(60秒不執行任務)的線程,當任務數增長時,此線程池又能夠智能的添加新線程來處理任務。此線程池不會對線程池大小作限制,線程池大小徹底依賴於操做系統(或者說JVM)可以建立的最大線程大小。
  • newScheduledThreadPool:建立一個大小無限的線程池。此線程池支持定時以及週期性執行任務的需求。
  • newSingleThreadScheduledExecutor:建立一個單線程的線程池。此線程池支持定時以及週期性執行任務的需求。

    java多線程之線程池

參考:http://blog.csdn.net/vernonzheng/article/details/8299108

http://blog.csdn.net/vernonzheng/article/details/8300031

6.線程同步與協做

同步:http://www.cnblogs.com/lintong/p/4371378.html

協做:http://www.cnblogs.com/lintong/p/4371398.html

淺談Java中CyclicBarrier的用法 CountDownLatch和CyclicBarrier的區別

7.線程操做

Java線程(四):線程中斷、線程讓步、線程睡眠、線程合併

相關文章
相關標籤/搜索