没有问题,你这里传给addManager方法的参数并没有做什么调用操作。
public void addManager(Manager manager){
this.managerList.add(manager);
}还有,相信楼主见过下面的代码,肯定没问题吧
Person p = new Person("zhangsan", 20);public class Person {
public String name;
public int age; Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public void addManager(Manager manager){
this.managerList.add(manager);
}还有,相信楼主见过下面的代码,肯定没问题吧
Person p = new Person("zhangsan", 20);public class Person {
public String name;
public int age; Person(String name, int age) {
this.name = name;
this.age = age;
}
}
那managerList就不会有值,Schedule开始了但managerList没值,不会进入循环,所以不会出错
我觉得你说的不对,只要调用了Schedule.instance.addManager(this);虽然没有构造完成,但是list还是会有manager的,举个例子:public class Manager {
private ArrayList<Integer> list = new ArrayList<Integer>();
//还有很多属性
protected Manager(){
Schedule.instance.addManager(this);
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
//初始化属性
list.add(1);
list.add(1);
list.add(1);
System.out.println("construct finish...");
}
public void changeStatus() {
for (Integer i : list) {
System.out.println(i);
}
}
}//单例
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(), 0, 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.changeStatus();
System.out.println("execute monitor...");
}
}
}
}
public class Main {
public static void main(String[] args) {
Schedule s = Schedule.instance;
Manager m = new Manager();
}
}
输出:execute monitor...
execute monitor...
construct finish...
1
1
1
execute monitor...
可以看到在Manager构造方法中,调研Schedule.instance.addManager(this);之后,休眠了3秒
但是在输出中还是会看到输出:
execute monitor...等构造玩之后,才把真正把manager的list的值打印出来