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

问题描述

由于 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");
}

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

解决方法

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

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