synchronized和ReentrantLock的实现原理是什么?它们又什么区别?

Crazy Code Farmer 2020-10-14 05:09:59

多线程面试中高频考点,我们发表不同的见解,增强印象。
...全文
4389 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuster 2020-10-16
  • 打赏
  • 举报
回复
synchronized是java自带的关键字,使用起来非常方便,ReentrantLock是jdk中提供的一个类。java开始支持synchronized时其效率相比ReentrantLock比较低,后面经过逐步优化,效率才和ReentrantLock相当。ReentrantLock的实现可以参考jdk的源码,继承了AbstractQueueSychronizer ,并且使用unsafe类的park和unpark休眠和唤醒线程,通过compareAndSwap方法实现并发机制,即获取锁实际上就是去改变内存中的某个变量的值,改变成功了代表获取了锁,如果该变量已经被其他线程修改了,当前线程只能等待其他线程修改回来,当前线程要么循环去判断要么休眠。java中对象有MarkWord,synchronized实现和其有关,synchronized有enter队列和wait队列,获取锁进入enter队列进行竞争,已经获取锁的通过wait方法释放锁后会进入wait队列,通过notify方法唤醒后会重新进入enter队列竞争锁。 ps:关于如何保证并发安全性的底层实现Linux 0.11中是通过禁用中断实现的,很简单粗暴。现在有原子指令来保证,通过锁内存来实现,软件上很难实现的东西硬件上很容易实现。以上内容经供参考,一些细节记不清了,需要去找资料研究!!!
做一个海贼 2020-10-15
  • 打赏
  • 举报
回复
都是可重入锁,synchronized使用完之后锁会自动释放,ReentrantLock需要手动释放,ReentrantLock更灵活点可以设置超时时间之类的。synchronized相对更简单使用方便。其他方面应该都差不多
面试题目: 1-10题: 1、java中==和equals和hashCode的区别 2、int与integer的区别 3、String、StringBuffer、StringBuilder区别 4、什么是内部类?内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、Serializable 和Parcelable 的区别 8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? 9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 10、string 转换成 integer的方式及原理 11-20题: 11、哪些情况下的对象会被垃圾回收机制处理掉? 12、静态代理和动态代理的区别,什么场景使用? 14、Java中实现多态的机制是什么? 16、说说你对Java反射的理解 17、说说你对Java注解的理解 18、Java中String的了解 19、String为什么要设计成不可变的? 20、Object类的equal和hashCode方法重写,为什么? 21-40题 21、List,Set,Map的区别 26、ArrayMap和HashMap的对比 29、HashMap和HashTable的区别 30、HashMap与HashSet的区别 31-40题 31、HashSet与HashMap怎么判断集合元素重复? 33、ArrayList和LinkedList的区别,以及应用场景 34、数组和链表的区别 35、开启线程的三种方式? 36、线程和进程的区别? 38、run()和start()方法区别 39、如何控制某个方法允许并发访问线程的个数? 40、在Java中wait和seelp方法的不同 41-50题 41、谈谈wait/notify关键字的理解 42、什么导致线程阻塞?线程如何关闭? 43、如何保证线程安全? 44、如何实现线程同步? 45、线程间操作List 46、谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解 49、synchronized 和volatile 关键字的区别 51-58题 51、ReentrantLocksynchronized和volatile比较 53、死锁的四个必要条件? 56、什么是线程池,如何使用? 56、什么是线程池,如何使用? 58、有三个线程T1,T2,T3,怎么确保它们按顺序执行?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧