synchronized和RetreenLock锁区别
1、synchronized是java关键字,RetreenLock是个java类
2、synchronized无法获取锁状态,Lock可以判断是否持有锁
3、synchronized会自动释放锁,Lock需要在finally中unlock()手动释放锁
4、使用synchronized,线程1获取锁,线程2只能等待;使用Lock,线程1获取锁,线程2会尝试获取锁,如果获取不到,不会一直等待,可以直接结束。
5、synchronized和Lock都是可重入的 Synchronized可重入锁分析 OR Synchronized可重入锁通俗易懂的简单分析
6、synchronized适合代码量少的同步,Lock适合大量代码同步
volitale和synchronized的区别
- volitale关键字提供了一个功能,就是被其修饰的变量在被修改后会被强制刷入到主内存中,
其他处理器的缓存由于遵守了缓存一致性原则,会把这个变量的值从主内存中加载到自己的
缓存中,因此在并发编程中保证了变量的可见性。
- volitale关键字会禁止指令重排,从而来保证有序性
- volitale关键字不能保证原子性
- synchronized可以保证原子性,通过字节码指令monitorenter和monitorexit。
- synchronized可以保证可见性
- synchronized关键字保证同一时刻只允许一条线程操作,从而保证了有序性
PS:多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改后的值,这就是可见性。