网站建设合同的注意点,房地产网址大全,营销网站制作方法,东莞找工作1.1 可重入锁、不可重入锁
Java中提供的synchronized#xff0c;ReentrantLock#xff0c;ReentrantReadWriteLock都是可重入锁。
重入#xff1a;当前线程获取到A锁#xff0c;在获取之后尝试再次获取A锁是可以直接拿到的。
不可重入#xff1a;当前线程获取到A锁ReentrantLockReentrantReadWriteLock都是可重入锁。
重入当前线程获取到A锁在获取之后尝试再次获取A锁是可以直接拿到的。
不可重入当前线程获取到A锁在获取之后尝试再次获取A锁无法获取到的因为A锁被当前线程占用着需要等待自己释放锁再获取锁。
1.2 乐观锁、悲观锁
Java中提供的synchronizedReentrantLockReentrantReadWriteLock都是悲观锁。
Java中提供的CAS操作就是乐观锁的一种实现。
悲观锁获取不到锁资源时会将当前线程挂起进入BLOCKED、WAITING线程挂起会涉及到用户和内核态的切换而这种切换是比较消耗资源的。 用户态JVM可以自行执行的指令不需要借助操作系统执行。 内核态JVM不可以自行执行需要操作系统才可以执行。
乐观锁获取不到锁资源可以再次让CPU调度重新尝试获取锁资源。
Atomic原子性类中就是基于CAS乐观锁实现的。
1.3 公平锁、非公平锁
Java中提供的synchronized只能是非公平锁。
Java中提供的ReentrantLockReentrantReadWriteLock可以实现公平锁和非公平锁
公平锁线程A获取到了锁资源线程B没有拿到线程B去排队线程C来了锁被A持有同时线程B在排队。直接排到B的后面等待B拿到锁资源或者是B取消后才可以尝试去竞争锁资源。
非公平锁线程A获取到了锁资源线程B没有拿到线程B去排队线程C来了先尝试竞争一波 拿到锁资源开心插队成功。 没有拿到锁资源依然要排到B的后面等待B拿到锁资源或者是B取消后才可以尝试去竞争锁资源。
1.4 互斥锁、共享锁
Java中提供的synchronized、ReentrantLock是互斥锁。
Java中提供的ReentrantReadWriteLock有互斥锁也有共享锁。
互斥锁同一时间点只会有一个线程持有者当前互斥锁。
共享锁同一时间点当前共享锁可以被多个线程同时持有。 知识速记 重入 乐观 公平 互斥