【JAVA多线程】JDK中的各种锁,看这一篇就够了
在Java中,有多种方式可以实现线程之间的同步和互斥,主要可以归结为以下几种类型:
- 重入锁(ReentrantLock)
- 读写锁(ReadWriteLock)
- 条件变量(Condition)
- volatile 变量
- 显式同步锁 (synchronized)
- 局部变量(ThreadLocal)
下面是每种锁的简单示例:
- 重入锁(ReentrantLock)
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock();
}
- 读写锁(ReadWriteLock)
ReadWriteLock rwLock = new ReentrantReadWriteLock();
rwLock.readLock().lock();
try {
// 读操作
} finally {
rwLock.readLock().unlock();
}
rwLock.writeLock().lock();
try {
// 写操作
} finally {
rwLock.writeLock().unlock();
}
- 条件变量(Condition)
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
lock.lock();
try {
// 等待条件
while (!condition) {
condition.await();
}
// 执行操作
} catch (InterruptedException e) {
// 处理中断异常
} finally {
lock.unlock();
}
// 满足条件,唤醒一个等待线程
lock.lock();
try {
condition.signal();
} finally {
lock.unlock();
}
- volatile 变量
volatile int count;
count++; // 非原子操作
- 显式同步锁 (synchronized)
synchronized (lockObject) {
// 临界区代码
}
- 局部变量(ThreadLocal)
ThreadLocal<T> localVariable = new ThreadLocal<>();
localVariable.set(value);
T value = localVariable.get();
以上代码展示了各种锁的基本使用方式。在实际应用中,可以根据具体需求选择合适的锁机制。
评论已关闭