实例演示:Java多线程同步问题
在Java中,多线程同步是确保多个线程在同一资源上安全工作的关键。以下是关于Java多线程同步问题的实例演示:
- 使用synchronized关键字
// 示例类
public class Counter {
private int count = 0;
// 同步方法,只允许一个线程访问count变量
public synchronized void increment() {
count++;
}
// 获取当前计数
public synchronized int getCount() {
return count;
}
}
- 使用wait()和notifyAll()
// 示例类,包含两个共享的锁对象
public class Counters {
private Lock lock1 = new ReentrantLock();
private Lock lock2 = new ReentrantLock();
// 共享计数器方法
public void incrementCounter(int counterId) {
lock(counterId).lock(); // 获取对应锁
try {
if (counterId == 1) { // 如果是第一个计数器
System.out.println("Counter 1 incremented.");
synchronized (lock2) { // 同步第二个锁,以便通知其他线程
lock2.notifyAll();
}
} else { // 如果是其他计数器
System.out.println("Counter " + counterId + " incremented.");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock(counterId).unlock(); // 释放对应锁
}
}
// 同步方法,用于通知所有线程某个计数器已更新
private void notifyAllCounters(int counterId) {
lock(counterId).lock();
try {
synchronized (lock2) { // 同步第二个锁,以便通知其他线程
lock2.notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock(counterId).unlock(); // 释放对应锁
}
}
}
在这个例子中,我们有两个共享的计数器(counterId为1和2),并使用了ReentrantLock作为同步机制。通过wait()和notifyAll()方法,我们可以实现对共享资源的安全访问。
还没有评论,来说两句吧...