在Java
中的锁可以分为以下这四类
当一个线程持有一个锁后,又想再持有这个锁时,发生的情况。
没必要给自己增加负担,所以Java
中的锁基本都是可重入锁
他们两之间的区别主要体现在访问资源时,要不要进行上锁
Java
中的Atomic
相关的类,底层正是使用的CAS
。Java
中,synchronized
和Lock
相关的类都属于悲观锁。他们主要的区别是,由于悲观锁会造成锁的占用和线程的切换,故占用较大。而乐观锁,发现数据、版本号不对时,就会放弃此次操作,重新再一次进行读写,占用不大,适合比较小量的线程共享数据。
如果只是少量的操作,那么进行乐观锁即可。
如果是大批的操作,一大批的线程共享数据,那么进行悲观锁会好上很多。
公平锁和非公平锁主要的区别在于获取锁时的排队机制不同。
当一个A线程正在运行,B线程先来阻塞,C后来阻塞,那么A线程运行完后,B线程和C线程如何进行分配
CPU
调度进行分配。Java
中的synchronized
就是一款非公平锁,而Lock
锁两者皆可,是可以进行设置的。
线程持有锁后,其他线程同时持有这把锁,通过这样的特性进行区分
在Java
中,synchronized
关键字就是一把互斥锁,而读写锁ReadWriteLock
中的读锁,就是一个共享锁。
我是半月,你我一同共勉!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。