synchronized使用方法:
A. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
B. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。
C. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
volatile:变量修饰符, 修饰的变量具有可见性(直接读写主存);禁止指令重排(指令重排不影响单个线程的执行,会影响线程并发执行的正确性);不能保证的线程的安全性(原子性);
synchronized:可以修饰一段代码或方法,既可以不保证可见性,有了能够保证原子性