理解和解决Java多线程同步问题示例
Java中的多线程同步问题是当多个线程共享资源时,如何保证这些线程在访问资源时不会出现数据冲突或异常结果。
以下是一个简单的示例,演示了使用synchronized关键字来同步两个共享变量的读写操作:
public class SharedVariables {
private int count = 0;
private int lock = 1; // 使用锁作为同步标志
public synchronized void increment() {
while (lock == 1) { // 确保锁未被其他线程占用
try:
wait(); // 让当前线程等待锁的释放
catch (InterruptedException e) {
Thread.currentThread().interrupt();
e.printStackTrace();
}
}
count++; // 更新count值
lock = 0; // 设置锁为0,表示可以被其他线程获取
notifyAll(); // 向所有等待锁的线程发出通知
}
public synchronized int getCount() {
while (lock == 1) { // 确保锁未被其他线程占用
try:
wait(); // 让当前线程等待锁的释放
catch (InterruptedException e) {
Thread.currentThread().interrupt();
e.printStackTrace();
}
}
return count; // 返回当前count值,但已经锁定,不能直接修改
}
}
在这个示例中,我们有两个共享变量count
和lock
。每个线程在访问这两个变量时,都需要先获得锁(即执行synchronized
关键字后面的代码块)。这样可以确保任何时候只有一个线程能修改共享资源,从而避免了同步问题。
还没有评论,来说两句吧...