getInstance未被调用,Listener为null的问题

来源:10-12 工厂模式

煮沧海

2019-09-20

老师,这里有一点疑惑和误解,这个getInstance返回的是安全的Listener,但是程序中没有调用,这个对象是返回给谁呢?我运行的时候,发现这个listener一直是null值,不会执行onEvent这个方法,输出“还未初始化完毕!”。
用了您的源码依旧是这样,是不是要在构造函数里调用getInstance呢

写回答

1回答

悟空

2019-09-20

返回的安全的Listener可以不使用,重点是有了getInstance方法后,我们一旦运行完getInstance函数,就代表listener已经准备完毕了,可以正常处理事件了,所以主函数可以这样写:

public static void main(String[] args) {
    MySource mySource = new MySource();
    MultiThreadsError7 safeListener = getInstance(mySource);
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            mySource.eventCome(new MultiThreadsError5.Event() {
            });
        }
    }).start();


}


0
3
悟空
回复
深海的星星15138
主要是为了演示可能导致线程问题的场景。在业务开发中,我们不需要这样写,不需要把这些放到构造函数中执行。这是错误案例演示。
2020-03-31
共3条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程