
synchronized 修饰符用于防止多线程同时访问特定方法或代码块,确保它们按顺序执行。这在多线程环境中尤为重要,避免出现一个线程修改数据时,另一个线程同时访问这些数据导致数据损坏。
在方法签名之前添加 synchronized 关键字,如下所示:
public synchronized void synchronizedMethod() {
// 方法代码
}考虑以下共享变量 counter 的多线程程序:
public class Counter {
private int counter = 0;
public void increment() {
counter++;
}
}现在,考虑以下测试类,通过创建 multiple 线程同时调用 increment 方法来测试 Counter 类:
立即学习“Java免费学习笔记(深入)”;
public class TestCounter {
public static void main(String[] args) {
Counter counter = new Counter();
// 创建并启动 10 个线程
for (int i = 0; i < 10; i++) {
new Thread(() -> {
for (int j = 0; j < 1000; j++) {
counter.increment();
}
}).start();
}
// 等待所有线程完成
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 打印最终 counter 值
System.out.println("最终 counter 值:" + counter.counter);
}
}由于并发访问 counter,输出结果可能不正确,因为多个线程可能同时尝试修改 counter 的值。
为了解决这个问题,可以在 increment 方法上使用 synchronized 修饰符,如下所示:
public class Counter {
private int counter = 0;
public synchronized void increment() {
counter++;
}
}当并发线程调用 increment 方法时,synchronized 修饰符会确保它们按顺序执行,避免数据竞争。
重新运行 TestCounter 类会产生预期的输出,显示正确的 counter 值,例如:
最终 counter 值:10000
以上就是如何使用synchronized修饰符定义Java中的函数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号