锁Lock对象
Lock在jdk1.8前性能比synchronize好,
Lock比synchronize代码灵活,用法多
用synchronized时,多线程写作工作需要用wait、notify、notifyAll进行配合工作
用Lock时,用Condition进行线程间的协作,Condition针对具体某一把锁而不是类。只有在锁的
基础上才会产生Condition
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
condition.await()// Object中的wait()
condition.signal()// notify()
一个Lock对象可以产生多个Condtion进行多线程间的交互,可以唤醒部分线程,使其他线程等待
重入锁,
在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定,不然会造成锁
永远无法释放,其他线程永远进不来的结果
Lock lock = new ReentrantLock();
lock.lock();//加锁
lock.unlock();//解锁 一般放在finally中
公平锁和非公平锁(默认)
Lock lock = new ReentrantLock(boolean isFair);true非公平, false公平
非公平锁效率高于公平锁,因为不需要维护顺序
tryLock(),尝试获得锁,返回true、false
isFair(),是否公平锁
isLocked(),是否锁定
getHoldCount():查询当前线程保持此锁的个数,也就是调用lock()次数
lockInterruptibly(),优先响应中断的锁
getQueueLength():返回正在等待获取此锁定的线程数
getWaitQueueLentth():返回等待与锁定相关的给定条件Condition的线程数
hasQueueThread(Thread thread):查询指定的线程是否正在等待此锁
hasQueueThreads();查询是否有线程正在等待此锁
hasWaiters(),查询是否有线程正在等待与此锁有关的Condition条件
读写锁(ReentrantReadWriteLock)
就是实现读写分离的锁。尤其是读多写少的情况下,高于重入锁
读读共享,写写互斥,读写互斥
分布式锁
在不同的JVM的相同的代码,一个线程进入另一个线程等待,用zookeeper注册中心做标识
Lock在jdk1.8前性能比synchronize好,
Lock比synchronize代码灵活,用法多
用synchronized时,多线程写作工作需要用wait、notify、notifyAll进行配合工作
用Lock时,用Condition进行线程间的协作,Condition针对具体某一把锁而不是类。只有在锁的
基础上才会产生Condition
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
condition.await()// Object中的wait()
condition.signal()// notify()
一个Lock对象可以产生多个Condtion进行多线程间的交互,可以唤醒部分线程,使其他线程等待
重入锁,
在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定,不然会造成锁
永远无法释放,其他线程永远进不来的结果
Lock lock = new ReentrantLock();
lock.lock();//加锁
lock.unlock();//解锁 一般放在finally中
公平锁和非公平锁(默认)
Lock lock = new ReentrantLock(boolean isFair);true非公平, false公平
非公平锁效率高于公平锁,因为不需要维护顺序
tryLock(),尝试获得锁,返回true、false
isFair(),是否公平锁
isLocked(),是否锁定
getHoldCount():查询当前线程保持此锁的个数,也就是调用lock()次数
lockInterruptibly(),优先响应中断的锁
getQueueLength():返回正在等待获取此锁定的线程数
getWaitQueueLentth():返回等待与锁定相关的给定条件Condition的线程数
hasQueueThread(Thread thread):查询指定的线程是否正在等待此锁
hasQueueThreads();查询是否有线程正在等待此锁
hasWaiters(),查询是否有线程正在等待与此锁有关的Condition条件
读写锁(ReentrantReadWriteLock)
就是实现读写分离的锁。尤其是读多写少的情况下,高于重入锁
读读共享,写写互斥,读写互斥
分布式锁
在不同的JVM的相同的代码,一个线程进入另一个线程等待,用zookeeper注册中心做标识