Lock锁的基本使用
在jdk1.5后新增的ReentrantLock類同樣可達到此效果,且在使用上比synchronized更加靈活
相關API:
使用ReentrantLock實現同步
lock()方法:上鎖
unlock()方法:釋放鎖
使用Condition實現等待/通知 類似于 wait()和notify()及notifyAll()
Lock鎖底層基于AQS實現,需要自己封裝實現自旋鎖。
Synchronized —屬于JDK 關鍵字 底層屬于 C++虛擬機底層實現
Lock鎖底層基于AQS實現-- 變為重量級
Synchronized 底層原理—鎖的升級過程
Lock 過程中 注意 獲取鎖 釋放鎖
ReentrantLock用法
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
-
@author zhuimeng
*/
public class Thread09 implements Runnable {
private int count = 100;
private Lock lock = new ReentrantLock();@Override
}try {// 獲取鎖lock.lock();if (count > 1) {count--;System.out.println(Thread.currentThread().getName() + "," + count);}} catch (Exception e) {e.printStackTrace();} finally {// 釋放鎖lock.unlock();}}
public void run() {
while (true) {
try {
Thread.sleep(30);
} catch (Exception e) {}
public static void main(String[] args) {
Thread09 thread09 = new Thread09();
Thread t1 = new Thread(thread09);
Thread t2 = new Thread(thread09);
t1.start();
t2.start();
}
}
Condition用法
public class Thread10 {
private ReentrantLock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
}
總結
以上是生活随笔為你收集整理的Lock锁的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正确的线程中止-标志位
- 下一篇: 多线程综合小案例