Java的record类是如何实现同步的?

Has*_*ang -3 java java-16

由于 Record 类实例没有公共 Object 实例所具有的 obj 头。但是我们仍然可以使用同步功能,例如:

public record User(long id, String name, int age) {}

User user = new User(1, "name", 18);
synchronized (user) {
    user.wait();
    System.out.println("test");
}
Run Code Online (Sandbox Code Playgroud)

从轻量级锁到重级锁的转换过程会不会像普通对象实例一样?

Bri*_*etz 6

爪哇的 record类是普通类,具有对象标识和它们附带的所有东西(如监视器)。

也就是说,如果您发现自己正在同步 a record,那么您可能做错了什么;记录的状态是浅不可变的(所有字段都是最终的),所以不清楚为什么要锁定记录。