![]() |
1
16
非常简单的例子:
|
![]() |
2
23
示例:在构造函数中,创建一个事件侦听器
内部阶级
(它隐式引用当前对象),并将其注册到侦听器列表中。
稍后可能发生的另一个问题是:对象A可以被完全创建,所有线程都可以使用,由另一个线程使用…除了该线程可以看到已创建的实例之外,具有“yesitis”值的yesitis,但不是
Java选择的原因是性能:如果所有数据都将与所有线程共享,则线程间可见性会降低性能,因此只保证同步数据被共享… |
![]() |
3
7
这就是双重检查锁定不起作用的原因。天真的代码
不安全,因为对局部变量的赋值可能发生在构造的其余部分(构造函数或工厂方法)之前。因此,螺纹1可以位于
|
![]() |
4
5
在上述代码中,
|
![]() |
5
2
史蒂夫·吉勒姆对双重检查锁具为什么坏的看法是正确的。如果线程A进入该方法,而obj为空,则该线程将开始创建对象的实例并将其赋给obj。线程B可能在线程A仍在实例化该对象(但尚未完成)时进入,然后将该对象视为非空,但该对象的字段可能尚未初始化。部分构造的物体。 但是,如果您允许关键字this转义构造函数,则可能会出现相同类型的问题。假设您的构造函数创建了一个分叉线程的对象实例,该对象接受您的对象类型。现在您的对象可能尚未完全初始化,也就是说,您的某些字段可能为空。通过在构造函数中创建的对象对对象的引用,现在可以将您作为非空对象引用,但可以获取空字段值。 再解释一下: 构造函数可以初始化类中的每个字段,但如果允许“this”在创建任何其他对象之前进行转义,则当其他线程(如果为1)查看时,它们可以为空(或默认的初始值)。它们不是最终的或2个。它们没有被宣布为易变的 |
![]() |
6
0
在这个操作之后,someEventListner的instanse将像一个普通的内部类一样有一个到测试对象的链接。 更多示例如下: http://www.ibm.com/developerworks/java/library/j-jtp0618/index.html |
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
![]() |
nick2225 · 隐式调用复制构造函数? 3 年前 |
![]() |
nohaga · 为什么在本例中p3需要默认构造函数? 3 年前 |
![]() |
Aadil Hoda · 为什么类类型的成员需要初始化? 3 年前 |
![]() |
EloiGG · 具有任意类型的变量的可数的C++函数 3 年前 |