锁
念兰
这个作者很懒,什么都没留下…
展开
-
Concurrency API中的LOCK接口(Lock interface)
Lock接口比同步方法和同步块提供了更具有扩展性的锁操作,允许使用更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的条件对象优势可以使锁更公平可以使线程在等待所的时候响应中断可以让线程尝试获取锁,并且无法获取锁的时候立即返回或者等待一段时间可以在不同的范围,以不同的顺序获取和释放锁Lock可以理解为是synchronized的扩展版,Lock提供了无条件的,可轮询的(tryLock方法),定时的(tryLock带参方法),可中断的(lockInterruptbly),原创 2021-11-27 14:28:27 · 277 阅读 · 0 评论 -
死锁和活锁的区别,死锁与饥饿的区别
死锁:是指两个或两个以上的线程在执行过程中因争夺资源而造成的一种互相等待的现象,如果没有外力作用他们将无法推进下去产生死锁的必要条件互斥条件:所谓互斥就是进程在某一时间段内独占资源请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放不剥夺条件:进程已获得资源,在未使用完之前不能强行剥夺循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系活锁:任务或执行者没有被阻塞,由于某些条件没有被满足导致一直重复尝试,失败-尝试-失败活锁和死锁的区别处于活锁的实原创 2021-11-26 17:40:37 · 333 阅读 · 0 评论 -
AQS中公平锁与非公平锁的对比
公平锁多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁优点:所有的线程都能得到资源,不会饿死在队列里缺点:吞吐量的下降,队列里除了第一个线程其他的线程都会阻塞,cpu环形阻塞线程的开销上升非公平锁多个线程去获取锁的时候会直接尝试获取,就获取不到再进入阻塞队列,如果能获取就就直接获取到锁了优点:减少cpu唤醒线程的开销,整体吞吐效率提高,cpu不用唤醒所有线程,会减少唤起线程的数量缺点:可能会导致队列中的一些线程一直或长时间获取不到锁导.原创 2021-11-16 00:42:08 · 261 阅读 · 0 评论 -
多线程原子性
原子性是指在一次操作或多次操作中,要么所有的操作全部都得到了执行并不会受到任何因素的干扰而中断,要么所有的操作都不执行,多个操作是一个不可分割的整体volatile关键字因为堆内存是唯一的而每一个线程都有自己的线程栈每一个线程栈在使用堆内存里面的变量时都会拷贝到变量的副本中在线程中每一次使用是从变量副本中获取的volatile关键字是强制线程每次使用时都会看一下共享区的最新值synchronizedsynchronized锁解决流程1线程获得锁2清空变量副本3拷原创 2021-10-28 08:01:30 · 339 阅读 · 0 评论 -
Java锁机制
偏向锁/轻量级锁/重量级锁偏向锁性能最好,可以避免执行CAS操作.轻量级锁用自旋和CAS避免了重量级锁带来的线程阻塞和唤醒,性能中等重量级锁则会把获取不到的锁的线程阻塞,性能最差(这三种锁特指synchronized锁的状态,通过在对象头中的mark word来表明锁的状态)偏向锁如果至始至终对这把锁都不存在竞争,那就没必要上锁,只需打个标记,这是偏向锁的思想.一个对象被初始化后,还没有任何线程来获取他的锁时,那他就是偏向的,当第一个线程来访问他并尝试获取锁的时候,他就将这个线程记原创 2021-11-13 14:25:29 · 58 阅读 · 0 评论