【发布时间】:2021-11-01 18:52:33
【问题描述】:
我需要对类级锁定中的静态变量行为有所了解。
场景: 考虑下面称为 Data 的类。
public class Data {
private static int i = 1;
private static int j = 1;
public void updateI() {
synchronized (Data.class) {
++i;
System.out.println(fmt() + " > " + Thread.currentThread().getName() + (" UPDATED > "+ i));
}
}
public void getJ() {
System.out.println(fmt() + " > " + Thread.currentThread().getName() + (" READ > "+ j));
}
}
这里,
- Thread-A 调用 updateI() 方法并获取锁。
- 同时Thread-B 正在调用getJ() 方法。
- 会不会是block Thread-B 因为 Thread-A 已经获取了类级别的锁? 或者它会允许 同时访问这两种方法?
谢谢....
【问题讨论】:
-
此外,如果它适合您,则 int 类型在多线程中是原子的(每个操作都会发生读取和更改)。阅读更多:docs.oracle.com/javase/tutorial/essential/concurrency/…
标签: java multithreading