1. “非线程安全”问题存在于"实例变量"中,方法内的变量为线程安全。java
2. 关键字synchronized 取得的锁都是对象锁。安全
3. 若是多个线程访问多个对象,则JVM会建立多个锁。多线程
4. A线程先持有object对象的Lock锁,B线程能够异步的方式调用object对象中的非synchronized类型的方法。异步
5. A线程先持有object对象的Lock锁,B线程若是在这时候调用object对象中的synchronized类型的方法,则须要同步。性能
6. synchronized锁重入:在使用synchronized时,当一个线程获得一个对象锁后,再次请求此对象锁时是能够再次获得该对象的锁的。这也说明,在一个synchronized方法\块的内部调用本类的其余synchronized方法\块时,是永远能够获得锁的。this
7. 可重入锁也支持在父子类继承的环境中。spa
8. 当存在父子类继承关系时,子类是彻底能够经过"可重入锁"调用父类的同步方法的。.net
9. 当出现异常时,锁自动释放。线程
10. 同步不具备继承性。对象
11. synchronized同步语句块:synchronized 同步方法在某些状况下有弊端,在这种状况下,可使用synchronized同步语句块来解决。
12. synchronized(this) 使用的"对象监视器"是一个。
13. synchronized还能够用在static静态方法上,那是对*.java对应的Class类进行加锁。
14. String 常量池
15. synchronized代码块一般状况下不适用String做为锁对象,由于String常量池带来的问题。
16. volatile:主要做用是使变量在多个线程间可见。它强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。
17. volatile变量不支持原子性。
18. synchronized vs volatile
19. 变量在内存中工做过程:
read和load阶段:从主存复制变量到当前线程工做内存;
use和asign阶段:执行代码,改变共享变量值;
store和write阶段:用工做内存数据刷新主对应变量的值;
20. AtomicInteger, AtomicLong 原子类。可是原子类在具备逻辑的状况下输出结果也具备随机性。
21. synchronized 代码块具备volatile同步的功能,synchronized可使具备可视性。