Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 锁定“上的实现”;“类”;类对象进行同步_Java_Multithreading_Synchronization_Jls_Mutual Exclusion - Fatal编程技术网

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

我正在经历。据此:

类锁实际上是作为对象锁实现的。当JVM加载一个类文件时,它会创建一个java.lang.class类的实例。锁定类时,实际上是锁定该类的类对象

但根据java规范,堆上相同类型(类)的所有对象共享一个类对象。 那么,对于对象的多线程同步访问,这怎么可能是真的呢?

类锁

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
混淆。