- Java并發編程:Callable、Future和FutureTask
http://www.cnblogs.com/dolphin0520/p/3949310.html
JAVA回調機制(CallBack)詳解
http://www.importnew.com/19301.html
智力題:http://blog.csdn.net/zhangerqing/article/details/8138296
泛型: http://iteye.blog.163.com/blog/static/18630809620131472312201/
在成員方法中使用泛型,需在方法修飾符(public)后添加泛型的定義
- Java內存模型
Java 內存模型:
http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html
- Java工作內存和主內存的交互
- 從主內存讀數據:lock>read>load>use>unlock
- 往主內存寫數據:lock>assign>store>write>unlock
深入Java內存模型:http://www.infoq.com/cn/articles/java-memory-model-1
- 在并發編程中,我們需要關注兩個關鍵的問題:如何實現線程通信以及線程同步。在命令式編程中,線程通信的兩個方法主要是:共享內存和消息傳遞。
- 在共享內存的并發模型中,線程之間通過共享程序的公共狀態,讀寫內存中的公共狀態進行隱式通信;在消息傳遞的并發模型中,線程之間必須通過明確地發送消息來進行通信。
- 同步是控制不同線程之間操作相對順序的機制。在共享內存的并發模型中,同步是顯式進行的,程序員必須指定某個方法或某段代碼必須互斥執行;在消息傳遞并發模型中,由于消息的發送必須在消息接收之前,所以同步是隱式執行的。
Java的并發采用的是共享內存的并發模型,Java線程之間的通信是隱式進行的,對程序員透明。
Java中,所有實例域、靜態域和數組元素都存在堆中,堆內存在線程之間共享。局部變量、方法定義參數、異常處理器參數不會再線程之間共享。
在執行程序時,為了提高性能,編譯器和處理器常常對指令進行重排序
- 編譯器優化的重排序
- 指令級的重排序
- 內存級的重排序
-
String
JDK源碼分析之String篇 http://www.tuicool.com/articles/BJ3eIj
-
集合類
-
HashMap、HashTable、ConcurrentHashMap
- HashMap繼承了AbstractMap,而HashTable繼承了Dictionary
- HashTable使用Enumeration,HashMap使用Iterator
- HashMap: key和value可以為null;線程不安全;效率高
- HashTable: key不能為null;線程安全;synchronized實現鎖
- ConcurrentHashMap: 線程安全的HashMap版本;key不能為null;基于lock實現鎖
-
HashSet對象實現equals和hashcode
http://jingyan.baidu.com/article/d5a880eb8fb61d13f147cc99.html
http://blog.sina.com.cn/s/blog_700aa8830101jtkq.html- hashCode不同時,則必為不同對象。hashCode相同時,根據equlas()方法判斷是否為同一對象。
-
NIO
-
Java對象內存布局
http://www.open-open.com/lib/view/open1423111722764.html- Java 鎖
http://www.importnew.com/19429.html -
http://ifeve.com/threadlocal%E4%BD%BF%E7%94%A8/
- synchronized和lock區別:
- synchronized是Java內置關鍵字;lock是接口
- synchronized鎖不能響應中斷;lock可以
- lock可以返回獲取鎖的狀態
- lock可以提高多線程讀操作的效率
- lock需要主動釋放鎖;synchronized自動釋放鎖
- synchronized和lock區別:
-
java8新特性
-
lock與synchronized
-
線程池
-
動態代理
http://www.360doc.com/content/14/0801/14/1073512_398598312.shtml
- 2PC與3PC