java中的锁——互斥锁 / 读写锁

【笔记】java中的所有锁


一、互斥锁

互斥锁:一次最多只能有一个线程持有的锁。如Java的Lock

共享资源的使用是互斥的,即一个线程获得资源的使用权后就会将该资源加锁,使用完后会将其解锁,
如果在使用过程中有其他线程想要获取该资源的锁,那么它就会被阻塞陷入睡眠状态,直到该资源被解锁才会被唤醒,
如果被阻塞的资源不止一个,那么它们都会被唤醒,但是获得资源使用权的是第一个被唤醒的线程,其它线程又陷入沉睡。

二、读写锁

读写锁既是互斥锁,又是共享锁,read模式是共享,write是互斥(排它锁)的。

读写锁有三种状态 :

  1. 读加锁状态、
  2. 写加锁状态
  3. 不加锁状态
    读写锁在Java中的具体实现就是 ReadWriteLock

读写锁能在读频率更高的情况下有更好的并发性能:

  • 如果有其它线程读数据, 则允许其它线程执行读操作, 但不允许写操作
  • 如果有其它线程写数据, 则其它线程都不允许读和写操作

加锁:

SET resource_name my_random_value NX PX 30000

解锁:

  //使用lua脚本
if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

java中的1.公平锁 / 非公平锁

java中的2.可重入锁 / 不可重入锁

java中的3.独享锁 / 共享锁/AOS

java中的4.互斥锁 / 读写锁

java中的5.乐观锁 / 悲观锁

java中的6.分段锁

java中的7.偏向锁 / 轻量级锁 / 重量级锁

java中的8.自旋锁

发布了50 篇原创文章 · 获赞 13 · 访问量 2406

猜你喜欢

转载自blog.csdn.net/endless_Y/article/details/104964982