Java中的锁以及CountDownLatch/CyclicBarrier/Semaphore的线程排序
跟MySQL的锁有区别也有关系
公平锁和非公平锁
ReentrantLock默认是非公平的,但是如果加了true就是公平锁。非公共锁吞吐量比公平锁大。
synchronized也是非公平锁。
可重入锁(递归锁ReentrantLock/synchronized):同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,即线程可以进入任何一个它已经拥有的锁所同步着的代码块。是同一把锁,可重入锁的最大作用就是避免死锁
自旋锁(CAS思想+Unsafe类如原子引用)
指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU。
手写一个自旋锁:
独占锁(写锁)/共享锁(读锁)/互斥锁
独占锁:该锁一次只能被一个线程所持有,对ReentrantLock和Synchronized都是独占锁。
共享锁:该锁能被多个线程所共享持有。对ReentrantReadWriteLock,用什么锁调用各自方法,其读锁是共享锁,其写锁
Java中的锁以及CountDownLatch/CyclicBarrier/Semaphore的线程排序最先出现在Python成神之路。
共有 0 条评论