问题描述
由于 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
上同步,那么您可能做错了;记录的状态是浅不可变的(所有字段都是最终的),所以不清楚为什么要锁定记录。