日期:2014-05-20  浏览次数:20826 次

构造函数泄露this
构造函数泄露this是什么意思有什么问题么
 

Java code
public class Javahqx extends javax.swing.JLabel implements cantime { 

    static sLtime slt = sLtime.getsLtime(); 

    public Javahqx() {
        super();
        slt.add("qqxx", 30, this);
    }


------解决方案--------------------
add操作里可能有其它线程操作传进去的this,而此时,this还没有构建完整(因为构造方法还没执行完),这时就操作this可能就有问题
------解决方案--------------------
探讨
add操作里可能有其它线程操作传进去的this,而此时,this还没有构建完整(因为构造方法还没执行完),这时就操作this可能就有问题

------解决方案--------------------
探讨
add操作里可能有其它线程操作传进去的this,而此时,this还没有构建完整(因为构造方法还没执行完),这时就操作this可能就有问题

------解决方案--------------------
探讨

恩 的确就是要多线程的 这个可能有问题是指的哪方面呢 那这个要怎样设计一下

有没有介绍过这个的书 把这句放在构造的最后一句是否可以解决问题

望解答 谢谢

------解决方案--------------------
原来如此 路过学习
------解决方案--------------------
slt 是共享变量,在多线程的环境下需要同步,即便在构造方法中。

http://topic.csdn.net/u/20090102/21/a217b3f6-35ef-4e86-ab1c-f7d05e934ef3.html
------解决方案--------------------
构造函数只是用于初始化,进入构造函数之前,对象实例已经被创建了。

对构造函数泄露this还真没明白?

------解决方案--------------------
1、构造方法写一些初始化的东西,构造完对象后再执行其它操作。这样的写法比较“正规”了,比如放到init方法中。
2、楼主的目的应该可能是,构造一个对象后,需要立刻将其在slt对象中进行一些维护;为防止多线程,可以对init方法进行同步化。
synchronize init(){
.....
.....
}
它本身就是用this做为同步锁。


只是一点最基本的方法,仅供参考。
------解决方案--------------------
探讨
add操作里可能有其它线程操作传进去的this,而此时,this还没有构建完整(因为构造方法还没执行完),这时就操作this可能就有问题

------解决方案--------------------
当前对象