![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
理一理这锁事
文章平均质量分 79
高清键盘侠
两轮码农
展开
-
ReentrantLock 与 synchronized
synchronized同步锁synchronized 它可以把任意一个非 NULL 的对象当作锁。他属于独占式的悲观锁,同时属于可重入锁。Synchronized 作用范围作用于方法时,锁住的是对象的实例(this);当作用于静态方法时,锁住的是Class 实例,又因为Class 的相关数据存储在永久带PermGen(jdk1.8 则是 metaspace),永久带是全局共享的,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线程;synchronized 作用于一个对象实原创 2020-09-19 19:44:54 · 270 阅读 · 0 评论 -
非自旋锁VS自旋锁和适应性自旋锁
1、什么是自旋所谓自旋,就是指当有另外一个线程来竞争锁时,这个线程会在原地循环等待,而不是把该线程给阻塞,直到那个获得锁的线程释放锁之后,这个线程就可以马上获得锁的。锁在原地循环的时候,是会消耗cpu的,就相当于在执行一个啥也没有的for循环。自旋其实就是在当前这个线程获取同步资源锁失败的时候,该线程会在原地一直等待锁释放,不会把该线程阻塞,只要获得锁的那个线程释放锁之后,这个等待的线程马上就可以去获得锁。原地循环等待会占用处理器时间的,类似在执行一个空的for循环一样。2、非自旋锁非自旋锁尝试获取原创 2020-06-20 20:51:02 · 829 阅读 · 0 评论 -
乐观锁和悲观锁详述和应用场景
乐观锁和悲观锁原理和应用场景1、并发控制在多线程出现并发的情况时,为了保证并发情况数据的准确和安全性,就需要通过并发控制保证一个用户的操作不会对另一个用户的操作产生不合理的影响。没有做好并发控制,就可能会导致脏读、幻读和不可重复读等问题。首先要明确:无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。2、乐观锁它乐观的认为,在操作数据时,别的线程不会更改数据,所以只是在更新数据前,判断数据是否被别的线程更新过。没有被更新的话,就成功写入;被更新过就放前当前更新操作,可以相对应的做报原创 2020-06-14 19:06:32 · 797 阅读 · 0 评论 -
可重入锁和非可重入锁剖析
1、可重入锁和不可重入的区别可重入锁也叫递归锁,是在一个线程获取锁后,内部如果还需要获取锁,可以直接获取的锁(前提锁对象得是同一个对象或者class)。不可重入锁也就是相反,线程获取锁后,内部不能再获取锁,由于之前已经获取过还没释放而阻塞,会导致线程死锁。ReentrantLock和synchronized都是重入锁。非可重入锁NonReentrantLock。所以可重入锁的一个优点是可一定程度避免死锁。2、代码示例:我们根据代码来看看:public class Demo2 { pu原创 2020-06-07 19:10:01 · 1807 阅读 · 0 评论 -
公平锁和非公平锁使用和解析
公平锁和非公平锁在多线程的学习中,发现通过显式锁对线程上锁解决了线程安全问题后,还存在会有线程插队的问题。可能刚出来的线程又马上抢到锁再次插队进入,导致后边的线程一直轮不到,最后线程饿死了的情况发生。问题代码示例:public class DemoReentrantLock { public static void main(String[] args) { //创建一个DemoR对象 Runnable r = new DemoR(); //创建原创 2020-05-31 15:22:34 · 1274 阅读 · 0 评论 -
Java 解决线程安全问题:上锁
为什么会有线程安全的问题?1、public class Bowl{ //碗数量 private int bowlNumber; public Bowl(int bowlNumber) { this.bowlNumber = bowlNumber; } public int getBowlNumber() { return bowlNumber; } public Bowl() { } //洗碗原创 2020-05-21 16:53:29 · 213 阅读 · 0 评论 -
听不懂你打我,MySQL的锁机制就这么简单
MySQL的锁机制相对来说比较简答我们首先要清楚,不同的存储引擎,锁机制也不同:MyISAM:表级锁(table-level locking)MEMORY:表级锁(table-level locking)BDB:页面锁(page-level locking)但也支持表级锁InnoDB(当前主流):既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。我们可以看到上面提到的三种锁机制:(锁机制特性关键词:开销、加锁速度、死锁、粒度、并发性能)锁粒度:锁粒度原创 2020-08-23 13:57:23 · 228 阅读 · 0 评论 -
锁的四种状态和状态升级
Java中的4种锁状态Java中,针对synchronized有无锁,偏向锁,轻量级锁,重量级锁4种锁状态级别从低到高依次是:无锁 > 偏向锁 > 轻量级锁 > 重量级锁。而且锁的状态只有升级,没有降级。但在学习这4种锁状态前我们得先了解一下这些知识。1.Synchronized为什么能实现线程的同步?这就涉及到两个重要的概念:Java对象头Monitor1.1 Java对象头首先synchronized是一种悲观锁,在操作同步资源前先给同步资源加锁,而加的这把锁是原创 2020-08-15 15:46:45 · 987 阅读 · 0 评论