- 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