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

在构造方法中将this传递给另外一个线程的疑问
在构造方法中将this传递给另外一个线程。

需求:一个线程,要监听所有manager的状态,在特定时刻改变manager的或调用manager的方法

代码:

public class Manager {
//还有很多属性
protected Manager(){
//初始化属性
Schedule.instance.addManager(this);
}
public void changeStatus() {
//具体业务

}


//单例
public class Schedule {

private CopyOnWriteArrayList<Manager> managerList = new CopyOnWriteArrayList<Manager>();
private ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);

public static final Schedule instance = new Schedule();
private Schedule(){
stpe.scheduleWithFixedDelay(new Monitor_Runnable(), 1, 1, TimeUnit.SECONDS);
}

//将manager加入到单例的Scheudle中
public void addManager(Manager manager){
this.managerList.add(manager);
}

//监听manager
class Monitor_Runnable implements Runnable{
@Override
public void run() {
for (Manager manager : managerList) {
//manager.的一些状态操作
manager.changeStatus();
}
}
}
}

问题:
在Manager的构造方法里,直接将this传递给了Schedule, 但是此时Manager还没有构造完成,而Schedule可能已经开始使用了
manager,这样会有问题吗?



------解决方案--------------------
一般意义上说构造没有完成是说对象中有成员变量没有初始化,你的例子中没有这种情况。