Java多线程实战问题:线程同步机制(如synchronized)使用示例
在Java中,synchronized关键字用于实现线程同步。当一个方法需要被多个线程安全地访问时,就需要使用synchronized。
以下是一个简单的示例,我们有一个共享资源类(Resource),两个线程尝试同时修改资源:
public class Resource {
private int count = 0;
synchronized void increment() {
count++;
notifyAll(); // 激活等待的线程
}
public int getCount() {
return count;
}
}
// 线程1
new Thread(() -> {
Resource resource = new Resource();
while (resource.getCount() < 5) { // 直到资源达到5
resource.increment(); // 修改资源
try {
Thread.sleep(100); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
// 线程2
new Thread(() -> {
Resource resource = new Resource();
while (resource.getCount() < 5) { // 直到资源达到5
try {
resource.increment(); // 修改资源,这将使线程1唤醒
Thread.sleep(200); // 模拟耗时操作,保证线程2不会被中断
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
在这个例子中,Resource.increment()
方法是同步的,因为它的实现包含对共享资源的修改。这样,当一个线程正在执行这个方法时,其他试图访问该方法的线程将会被阻塞,直到当前线程完成其操作。
在示例代码中,线程1和线程2分别尝试增加资源的数量,但由于同步机制的作用,它们并不会同时进行修改,而是交替进行。
还没有评论,来说两句吧...