常见的Java锁有以下几种:
1. synchronized关键字
synchronized
是Java提供的最基本的锁,可以用于方法或代码块中。它采用悲观锁的机制,在同一时间只能有一个线程获得该锁,其他线程需要等待。
示例:
public class SynchronizedExample {
private int count = 0;
public synchronized void increment() {
count++;
}
public static void main(String[] args) throws InterruptedException {
SynchronizedExample obj = new SynchronizedExample();
Runnable task = () -> {
for (int i = 0; i < 10000; i++) {
obj.increment();
}
};
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(obj.count);
}
}
2. ReentrantLock
ReentrantLock
与synchronized
类似,也是可重入的互斥锁。它提供了更灵活的锁定操作,在一些复杂的场景下比synchronized
更可靠。
示例:
public class ReentrantLockExample {
private final ReentrantLock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public static void main(String[] args) throws InterruptedException {
ReentrantLockExample obj = new ReentrantLockExample();
Runnable task = () -> {
for (int i = 0; i < 10000; i++) {
obj.increment();
}
};
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(obj.count);
}
}
除了synchronized
和ReentrantLock
,还有StampedLock
、ReadWriteLock
、Semaphore
等锁机制可供选择。使用时需要根据场景和需求选择适合的锁机制。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常见的Java锁有哪些? - Python技术站