0

下面是我的界面 -

public interface IClient {
    public String read(ClientInput input);
}

这是我的接口实现 -

public class TempClient implements IClient {

    @Override
    public String read(ClientInput input) {

    }
}

以下是我的工厂代码 -

public class TempClientFactory {

    public static IClient getInstance() {
    // new TempScheduler().startScheduler();
    return ClientHolder.INSTANCE;
    }

    private static class ClientHolder {
        private static final TempClient INSTANCE = new TempClient();
    }
}

现在我有一个工厂,它可以获取这样的实例,TempClient因此客户在调用我们的代码时将使用我们的工厂,如下所示。

IClient client = TempClientFactory.getInstance();
client.read(input);

下面是我的后台线程代码 -

public class TempScheduler {

    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        public void startScheduler() {
            final ScheduledFuture<?> taskHandle = scheduler.scheduleAtFixedRate(new Runnable() {
                public void run() {
                try {
                    callServers();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                }
            }, 0, 500, TimeUnit.SECONDS);
        }
    }

    //... some code
}

问题陈述:-

  1. 现在我有一个后台线程,它将在后台运行,它从 URL 中获取数据,解析它并将其存储在一个变量中。现在我想要的是,一旦我们的客户开始使用工厂调用使用我们的代码,我希望后台线程启动。所以我想我可以把后台线程调用放在我的工厂getInstance方法中。那是放在那里的正确位置吗?
4

1 回答 1

1

我想是的,把它放在 getInstance() 中,并且只在第一次调用这个方法时调用它。我想这就是你想要的。

或者

如果您正在使用某个框架并且该框架在应用程序初始化/准备好时向您发送一个事件,那么您也可以在那里挂钩并在那里执行。但在这种情况下,它甚至可能在客户调用 getInstance() 之前就开始执行。由您决定是否可以。

后者是更好的恕我直言。

于 2014-01-14T19:55:28.103 回答