volatile和synchronized的相关内容

volatile和synchronized扮演者重要的角色。

volatile
volatile是轻量级的synchronized,它保证了共享变量的可见性(当一个线程修改一个共享变量时,另一个线程可以读到这个修改的值)。如果volatile变量修饰符使用的恰当,比synchronize的使用和执行成本更低。

synchronized
synchronized是重量级锁,他不仅保证了可见性,还保证了原子性。

利用synchronized实现同步的具体表现为3种形式:
1.对于同步方法,锁是当前实例对象。
2.对于静态同步方法,锁是当前类的Class对象。
3.对于同步方法块,锁是Synchronized括号里配置的对象。

Sychronized支持重入锁, Sychronized A里面可以调用Sychronized B方法,重入锁另外一种情形,子类锁调用父类锁。
被sychronized锁定的代码块越少同步效率就越高.

其他相关内容:
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。
程序运行中如果碰到异常,那么锁默认会被释放.所以在高并发处理的过程中,有异常要考虑清楚
wait/notify/notifyall 必须作用于同一个对象才能达到目的,调用wait会进入等待并且释放锁,调用notify则不会。
调用wait前必须进行Synchronized操作,要么会抛异常 IllegalMonitorStateException(非法监控状态异常)

你可能感兴趣的:(volatile和synchronized的相关内容)