Java的记录class是如何实现同步的?
How does Java's record class implement synchronization?
因为 Record class 实例没有 obj header 而普通 Object 实例有。但我们仍然可以使用同步功能,例如:
public record User(long id, String name, int age) {}
User user = new User(1, "name", 18);
synchronized (user) {
user.wait();
System.out.println("test");
}
会不会有像普通Object实例从轻量级锁到重度锁转换的过程?
Java的record
类是普通的类,有一个对象标识和它们附带的所有东西(比如监视器。)
就是说,如果您发现自己在 record
上同步,您可能做错了什么;记录的状态是不可变的(所有字段都是最终的),所以不清楚为什么要锁定记录。
因为 Record class 实例没有 obj header 而普通 Object 实例有。但我们仍然可以使用同步功能,例如:
public record User(long id, String name, int age) {}
User user = new User(1, "name", 18);
synchronized (user) {
user.wait();
System.out.println("test");
}
会不会有像普通Object实例从轻量级锁到重度锁转换的过程?
Java的record
类是普通的类,有一个对象标识和它们附带的所有东西(比如监视器。)
就是说,如果您发现自己在 record
上同步,您可能做错了什么;记录的状态是不可变的(所有字段都是最终的),所以不清楚为什么要锁定记录。