【发布时间】:2020-08-21 00:21:53
【问题描述】:
这个问题没有回答必要性部分: Synchronized blocks in constructors.
鉴于此格言
- JVM 一次不允许多个线程调用类的构造函数
问题 A
这是否意味着......?
- JVM 将不允许多个线程调用一个类的任何构造函数
- 这样即使一个类中有多个构造函数,一个类一次也只能由一个线程实例化。
- 如果一个类有多个构造函数,那么每个构造函数一次只能被一个线程调用
- 这样,如果一个类具有三个构造函数,则三个线程可以同时实例化该类。
在我看来,#1 是问题 1 的答案。
问题 B
如果 QuestionA.answer#1 为真,是否意味着在构造函数中使用同步块毫无意义?
例如假设setBrandAccessor方法只被构造函数调用,是否不需要同步setBrandAccessor方法?如有必要,请说明原因。
class DataAccessor {
static Brand brandAccesor;
DataAccessor(Brand brand) {
super(brand);
setBrandAccessor(Brand brand);
}
private synchronized setBrandAccessor(Brand brand) {
if (brandAccessor==null) brandAccessor=brand;
}
}
【问题讨论】:
-
这个格言是从哪里来的?
标签: java multithreading constructor