手册
目录
收藏980
分享
阅读811
更新时间2025-07-22
前言:
定义和用法synchronized 关键字是一个修饰符,用于锁定一个方法,以便一次只能有一个线程使用它。这可以防止线程之间因竞态条件而产生的问题。在上面的例子中
synchronized 关键字是一个修饰符,用于锁定一个方法,以便一次只能有一个线程使用它。这可以防止线程之间因竞态条件而产生的问题。
在上面的例子中,如果从 transfer() 方法中移除 synchronized 关键字,可能会导致变量 a 和 b 的值在操作过程中被另一个线程修改。这将导致两个变量之间的总额发生变化。
教程:Java 线程
使用 synchronized 修饰符来防止线程之间的竞态条件:
public class Main implements Runnable {
public static int a, b;
public static void main(String[] args) {
a = 100;
b = 100;
// 在转账前检查 a 和 b 之间的总额
System.out.println("转账前总额: " + (a + b));
// 运行线程,将在 a 和 b 之间进行转账
Thread thread1 = new Thread(new Main());
Thread thread2 = new Thread(new Main());
thread1.start();
thread2.start();
// 等待线程运行结束
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 在转账后检查 a 和 b 之间的总额
// 应该与转账前相同
System.out.println("转账后总额: " + (a + b));
}
public void run() {
for (int i = 0; i < 10000000; i++) {
transfer();
}
}
public static synchronized void transfer() {
// 选择一个随机金额进行转账
int amount = (int) (5.0 * Math.random());
// 在 a 和 b 之间进行转账
if (a > b) {
a -= amount;
b += amount;
} else {
a += amount;
b -= amount;
}
}
}
点击 "运行实例" 按钮查看在线实例
相关
视频
RELATED VIDEOS
科技资讯
1
2
3
4
5
6
7
8
9
精选课程
共5课时
17.2万人学习
共49课时
77万人学习
共29课时
61.7万人学习
共25课时
39.3万人学习
共43课时
70.9万人学习
共25课时
61.6万人学习
共22课时
23万人学习
共28课时
33.9万人学习
共89课时
125万人学习