Java并发编程实践笔记一
Java并发编程实践笔记一 2011-05-24 
1. 一个类首先要确定是否在多线程环境下使用。
2. value++存在三步 读取 加一 写入新值
3. @ThreadSafe 表示类线程安全的
4. 无状态的类数据都定义在各自线程堆栈里面永远不会发生线程安全问题
5. 无状态对象永远是线程安全的。
6. 竞争条件中一种“检查在运行”,常见用法“惰性初始化”。
7. 多个类变量同步时候需要保证有个不变的约束制约他们相互关联(如果各个变量存在关系)
8. 为了保护状态的一致性,在单一的原则操作中更新相互关联的状态变量。
9. 锁是可以重入的 如果不可以子类重写父类后
10. 耗时间的操作不要放在synchronized锁里面
11. 内存可见性,发生在多个线程共享数据的时候 Synchronized除了划定原子界限还能使得多线程之间内存可见注意同一个线程肯定可见,但是如果在不同的线程问题就出来了(涉及到寄存器的缓存。。。)
12.Jvm将64位的double 和long划分为两个32为操作这样在没有声明为volatile时候还是会出现问题的。
12. 锁不仅关系到同步和互斥还关系到内存的可见性。
13. 当一个域声明为volatile的时候编译器运行时会监视这个变量,他是共享的而且不会和其他内存操作一起重排序,不会被缓存在寄存器或者其他处理器隐藏的地方。所以读取volatile变量总是返回新值。Volatile不会加锁所以相对于锁是轻量级的
14. 加锁可以保证可见性和原则性,但是Volatile只能保证可见性。