淘先锋技术网

首页 1 2 3 4 5 6 7

Java中的监视器和锁是重要的多线程编程概念,用于确保线程的互斥和同步,保证共享数据的安全性。在Java中,每个对象都有一个内置的监视器,称为锁。当一个线程在执行同步代码块或同步方法时,会自动获取该对象的锁,并释放锁时,该对象将成为可用状态。

public class MonitorAndLockDemo {
private int count = 0;
private Object lock = new Object(); // 定义一个锁对象
public void increment() {
synchronized(lock) { // 对锁进行同步
count++;
}
}
public void decrement() {
synchronized(lock) { // 对锁进行同步
count--;
}
}
}

上面的代码演示了如何使用监视器和锁实现线程同步。在increment和decrement方法中,加上了synchronized关键字,以确保同一时间只有一个线程能够访问这些方法,在代码块结束时释放锁,使其他线程能够获得锁进行操作。使用同步块而非同步方法,是为了实现更细粒度的控制。

除了使用内置的锁对象进行线程同步,Java还提供了其他的锁及同步工具类,如ReentrantLock类和Semaphore类等。

public class ReentrantLockDemo {
private int count = 0;
private ReentrantLock lock = new ReentrantLock(); // 定义一个可重入锁
public void increment() {
lock.lock(); // 获取锁
try {
count++;
} finally {
lock.unlock(); // 释放锁
}
}
public void decrement() {
lock.lock(); // 获取锁
try {
count--;
} finally {
lock.unlock(); // 释放锁
}
}
}

上面的代码演示了如何使用ReentrantLock类实现线程同步。

总之,Java中的监视器和锁是实现线程同步的重要工具,在多线程编程中需要加以注意和应用。