Java使用对象作为监视器,这个对象是不是太重了?

标签 java multithreading

我用 Java 语言规范 17.1 读到了这篇文章:

"Each object in Java is associated with a monitor, which a thread can lock or unlock."

为什么一定?这不是让java对象变得太重了吗?我不知道为什么像字符串这样的对象自然应该是监视器!

编辑:

我想了一下,是的,Java有一个关键字synchronized,因为EVERY对象可以有一个synchronized方法,所以有必要关联EVERY strong> 反对监视器。

但这似乎不是一个很好的解决方案,通常一个类需要多个互斥锁,除了那些非常简单的 pojo 类。

最佳答案

您的假设有一定道理,在经典书籍“Java Concurrency in Practice”(由大师 Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea 撰写)中,他们写道:

The fact that every object has a built-in lock is just a convenience so that you needn't explicitly create lock objects. In retrospect, this design decision was probably a bad one: not only can it be confusing, but it forces JVM implementors to make tradeoffs between object size and locking performance.

(第 2.4 章:用锁保护状态)

关于Java使用对象作为监视器,这个对象是不是太重了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748447/

相关文章:

python - 多进程程序中线程与进程的关系

c++ - 多线程应用程序中无锁队列的访问冲突

java - 如何在操作完成之前隐藏按钮?素颜

java - 从一个 csv 读取与从文件夹读取然后再从 csv 读取

java - 从封闭类外部访问私有(private)内部类的公共(public)方法

java - 为什么我们需要用@Entity注解一个POJO

java - 来自 Thread 的警报对话框 - Android

c# - 使用 AsParallel 或 Parallel.ForEach 控制线程数

multithreading - 如何使用多线程提高性能?

java - 微软outlook认证oAuth2.0