Java 锁定“上的实现”;“类”;类对象进行同步
我正在经历。据此: 类锁实际上是作为对象锁实现的。当JVM加载一个类文件时,它会创建一个java.lang.class类的实例。锁定类时,实际上是锁定该类的类对象 但根据java规范,堆上相同类型(类)的所有对象共享一个类对象。 那么,对于对象的多线程同步访问,这怎么可能是真的呢?类锁Java 锁定“上的实现”;“类”;类对象进行同步,java,multithreading,synchronization,jls,mutual-exclusion,Java,Multithreading,Synchronization,Jls,Mutual Exclusion,我正在经历。据此: 类锁实际上是作为对象锁实现的。当JVM加载一个类文件时,它会创建一个java.lang.class类的实例。锁定类时,实际上是锁定该类的类对象 但根据java规范,堆上相同类型(类)的所有对象共享一个类对象。 那么,对于对象的多线程同步访问,这怎么可能是真的呢?类锁 synchronized (String.class) {...} 对象锁 //doesn't matter what the lock object is as long as it's not null p
synchronized (String.class) {...}
对象锁
//doesn't matter what the lock object is as long as it's not null
private final Object lock = new Object();
...
synchronized (lock) {...} // will throw NPE if lock is null
它们都被认为是object
锁,因为String.class
返回class
的实例
在类锁中,线程获取类
实例监视器。在对象锁中,线程获取字符串
实例监视器。类锁
synchronized (String.class) {...}
对象锁
//doesn't matter what the lock object is as long as it's not null
private final Object lock = new Object();
...
synchronized (lock) {...} // will throw NPE if lock is null
它们都被认为是object
锁,因为String.class
返回class
的实例
在类锁中,线程获取类
实例监视器。在对象锁中,线程获取字符串
实例监视器
但根据java规范,堆上相同类型(类)的所有对象共享一个类对象。那么,对于多线程同步访问对象,这怎么可能是真的呢
只有synchronizedstatic方法需要线程来获取类对象的锁。所有同步实例方法都需要不共享的相关实例对象的锁
但根据java规范,堆上相同类型(类)的所有对象共享一个类对象。那么,对于多线程同步访问对象,这怎么可能是真的呢
只有synchronizedstatic方法需要线程来获取类对象的锁。所有同步实例方法都需要不共享的相关实例对象的锁
但根据java规范,堆上所有相同类型(类)的对象
共享单个类对象。那么,对于多线程,这怎么可能是真的呢
同步访问对象
类级锁在静态方法中更有意义。如果在静态方法上使用synchronized关键字,则其监视器用于锁的对象是类对象,即由literal class.class表示的对象
但根据java规范,堆上所有相同类型(类)的对象
共享单个类对象。那么,对于多线程,这怎么可能是真的呢
同步访问对象
类级锁在静态方法中更有意义。如果在静态方法上使用synchronized关键字,则其监视器用于锁的对象是类对象,即由literal class.class表示的对象。@assylias您是对的。我想告诉大家,对象是什么并不重要,但我不想与
object
@assylias这个词混淆,你是对的。我想表明,对象是什么并不重要,但不想与单词object
混淆。