![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
juc
文章平均质量分 68
成长的小ZZ
记录和巩固学过的知识,不断探索新技术
展开
-
【什么是可中断锁】
本文介绍了中断锁的实现,通过显示锁 Lock 的 lockInterruptibly 方法来完成,它和 lock 方法作用类似,但 lockInterruptibly 可以优先接收到中断的通知,而 lock 方法只能“死等”锁资源的释放,同时这两个方法的区别也是常见的面试题,希望本文对你有用。。原创 2024-07-03 23:16:28 · 701 阅读 · 0 评论 -
【什么是 可重入锁】
当释放了所有的锁,才执行notify()。如果在执行这个方法时,有第二个线程想要执行这个方法,因为lockedBy不等于第二个线程,导致这个线程进入了循环,也就是等待,不断执行wait()方法。第一个线程执行print()方法,得到了锁,使lockedBy等于当前线程,也就是说,执行的这个方法的线程获得了这个锁,执行add()方法时,同样要先获得锁,因不满足while循环的条件,也就是不等待,继续进行,将此时的lockedCount变量,也就是当前获得锁的数量加一。原创 2024-07-03 23:13:26 · 519 阅读 · 0 评论 -
【公平锁 和 非公平锁】
只在同一个线程外层函数获取锁后,内层递归函数仍然能够获取该所得代码在同一个线程在外层获取所得时候,进入内层会自动获取锁也就是说 线程可以进入任何一个他已经拥有的锁所同步者的代码块。非公平锁: 多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情况下可能造成优先级反转和饥饿现象。非公平锁的优点在于吞吐量必公平锁大 对于synchronized而言 也是一种非公平锁.对ReentrantReadWriteLock其读锁是共享锁,其写锁是独占锁。原创 2024-07-01 21:20:44 · 504 阅读 · 0 评论 -
【悲观锁和乐观锁的区别】
CAS可能会造成ABA的问题,ABA问题指的是,线程拿到了最初的预期原值A,然而在将要进行CAS的时候,被其他线程抢占了执行权,把此值从A变成了B,然后其他线程又把此值从B变成A,然而此时的 A 值已经并非原来的 A 值了,但最初的线程并不知道这个情况,在它进行 CAS 的时候,就会误认为它从来没有被修改过,只对比了预期原值为 A 就进行了修改,这就造成了 ABA 的问题。悲观锁认为对于同一个数据的并发操作一定是会发生修改的,采取加锁的形式,悲观地认为,不加锁的并发操作一定会出问题。原创 2024-06-29 23:13:18 · 464 阅读 · 0 评论 -
【java 线程的状态】
Java 线程在运⾏的⽣命周期中的指定时刻只可能处于下⾯ 6 种不同状态的其中⼀个状态状态名称说明NEW初始状态,线程被构建,但是还没有调用start()方法RUNNABLE运行状态,Java线程将操作系统中的就绪和运行两种状态统称为"运行中"BLOCKED阻塞状态,表示线程阻塞于锁WAITING等待状态,表示线程进入等待状态,进入该状态表示当前线程需要其他线程通知(notify或者notifyAll)超时等待状态,可以指定等待时间自己返回TERMINATED。原创 2024-06-20 22:33:59 · 638 阅读 · 0 评论 -
【Java 如何创建线程】
如果线程的目的是为了开启一条执行路径去运行指定的代码和其他代码实现同时运行,而运行的指定代码和其他代码实现同时运行,而运行的指定代码就是这个执行路径的任务。解决思路: 就是将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程不可以参与运算,必须要当前线程把这些代码都执行完毕后,其他线程才可以参与运算。同步的好处:解决了线程的安全问题 同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁。同步函数和同步代码的区别: 同步函数的锁是固定的this 同步代码块的锁是任意的对象。原创 2024-06-20 22:30:44 · 463 阅读 · 0 评论