synchronized与lock的区别,volatile关键字总结
2020-02-02 15:40
393 查看
1.synchronized与lock的区别
- synchronized是关键字属于JVM层面,lock是类
- synchronized并不需要手动释放,不可中断,是一个非公平锁,只能全部唤醒或者随机唤醒
- lock需要lock()和unlock()方法配合try/finally使用,同时它是一个可中断的可重入锁,默认是非公平锁,但是可以设为公平锁,同时可以条件唤醒
- jdk1.6之前,synchroized是一个重量锁,因为他需要调用c语言库,所以产生用户态向内核态的切换,导致效率低下,jdk1.6之后引入了偏向锁和轻量级锁,所以在并发较高的情况下效率比lock高,但是lock提供的方法比较丰富
2.volatile关键字总结
-
volatile是jvm提供的轻量级同步机制,具有三个特性
-
1.保证可见性:可见性就是当一个线程内的数据被更改,在数据刷到主存之前,其他数据可以知道
-
2.不保证原子性:比如i++等操作不是原子操作,在++之前,值可能被更改
-
3.禁止指令重排:就是保证特定操作顺序,保证某些变量的内存可见性,它会在写操作之前加入一道store屏障,将工作内存的共享变量刷新回主存,会在读之前加入一条load屏障指令,从主内存中读取共享变量。
3.jmm内存模型 -
首先并不是真实存在,而是一组规范,硬盘<内存<cpu
-
线程解锁前,所有变量拷贝进各自线程工作内存
-
线程加锁前必须读取主内存的最新值到各自工作内存
-
加锁和解锁必须是同一把锁
4.如何解决不保证原子性 -
加sync
-
用juc的原子类atomicInteger
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- Lock 接口与 synchronized 关键字的区别
- synchronized和ReentrantLock的区别总结
- volatile、synchronized、lock有什么区别,以及在哪些场景下使用哪种方式?
- Lock接口与Synchronized关键字的区别
- Java 关键字volatile 与 synchronized 作用与区别
- java并发编程synchronized、volatile关键字及ReentrantLock类总结
- volatile、ThreadLocal、synchronized等3个关键字区别
- Synchronized、lock、volatile、ThreadLocal、原子性总结、Condition
- lock锁 synchronized 关键字 区别
- Java多线程总结(二):理解对象锁 & synchronized和Lock的区别
- ReenTrantLock可重入锁(和synchronized的区别)总结
- java中关键字volatile的作用; volatile vs synchronized的区别
- Java 关键字volatile 与 synchronized 作用与区别
- volatile、ThreadLocal、synchronized等3个关键字区别
- ReenTrantLock可重入锁(和synchronized的区别)总结
- Java 关键字volatile 与 synchronized 作用与区别
- synchronized和lock以及synchronized和volatile的区别
- Java关键字volatile和synchronized作用和区别
- (五)Lock锁的用法||Lock锁与 synchronized 关键字的区别
- Java 关键字volatile 与 synchronized 作用与区别