锁
panda_1994
这个作者很懒,什么都没留下…
展开
-
Java 并发编程(四)JVM中锁的优化
偏向锁、轻量级锁、重量级锁三者各自的应用场景偏向锁:只有一个线程进入临界区轻量级锁:多个线程交替进入临界区重量级锁:多个线程同时进入临界区偏向锁、轻量级锁都是JVM引入的锁优化手段,目的是降低线程同步的开销。比如以下的同步代码块:synchronized (lockObject) { // do something}上述同步代码块中存在一个临界区,假设当前存在Thread#1...原创 2019-02-22 16:06:55 · 263 阅读 · 1 评论 -
Java 并发编程(三)Synchronized底层优化(偏向锁与轻量级锁)
Synchronized低效的原因在Java SE 1.6发布前,使用Synchronized关键字实现同步功能是比较低效的,很多人称其为重量级锁.究其原理,是因为Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的,而监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。操作系统实现线程之间的切换需要从用户态转换到核心态,这个成本非常高,状态之间的转...原创 2018-11-27 21:12:27 · 226 阅读 · 0 评论 -
Java并发编程常见面试题夺命追问
1. 守护线程(Daemon)与用户线程(User)的区别守护线程时程序运行时在后台提供服务的线程,当所有非守护线程结束后,也即程序终止时,所有守护线程都将一起被杀死。main()是用户线程,JVM的垃圾回收线程就是一个守护线程通过Thread类中的setDaemon(boolean on)方法,true则把该线程设置为守护线程,反之为用户线程。Thread.setDaemon()必须在T...原创 2019-02-24 20:54:25 · 281 阅读 · 0 评论 -
面试中如何回答分布式锁的实现
实现分布式锁的方法主要有四种:数据库唯一索引Redis的SETNX指令Redis实现的RedLock算法ZooKeeper的临时有序节点第一种是通过数据库唯一索引,通过往数据库中插入唯一索引表示获取到锁,删除该唯一索引表示释放该锁。唯一索引可以保证当前数据库中该索引是唯一的。那么就可以使用这个唯一索引来判断数据是否处于锁定状态。但是数据库唯一索引没法设置过期时间,一旦解锁失败其它进程...原创 2019-03-03 10:06:59 · 674 阅读 · 0 评论 -
面试中如何回答Java中的锁机制
Java中锁机制Java中多线程加锁机制主要有两种,一种是JDK实现的lock,另外一种是JVM底层实现的Synchronized关键字。Synchronized是JVM底层实现的,JVM原生支持synchronized,而reentrantlock是JDK实现的,并不是所有jdk版本都支持reentrantlock,而且使用synchronized无需显式地释放锁,JVM自己会保证锁的释放。...原创 2019-04-12 17:08:36 · 705 阅读 · 1 评论