Java 如何在应用程序启动时启动后台线程

Java 如何在应用程序启动时启动后台线程,java,factory-pattern,scheduledexecutorservice,Java,Factory Pattern,Scheduledexecutorservice,下面是我的界面- public interface IClient { public String read(ClientInput input); } public class TempClient implements IClient { @Override public String read(ClientInput input) { } } 这是我对接口的实现- public interface IClient { public Strin

下面是我的界面-

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

    @Override
    public String read(ClientInput input) {

    }
}
这是我对接口的实现-

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
}
公共类临时调度器{
private final ScheduledExecutorService scheduler=Executors.newScheduledThreadPool(1);
公共无效startScheduler(){
final ScheduledFuture taskHandle=scheduler.scheduleAtFixedRate(new Runnable()){
公开募捐{
试一试{
callServers();
}捕获(例外情况除外){
例如printStackTrace();
}
}
},0500,时间单位为秒);
}
}
//... 一些代码
}
问题陈述:-

  • 现在我有一个后台线程,它将在场景后面运行,从URL获取数据,解析数据并将其存储在变量中。现在我想要的是,只要我们的客户开始使用工厂调用我们的代码,我就希望后台线程开始。所以我想我可以把后台线程调用放在我的工厂
    getInstance
    方法中。。放在那里对吗

  • 我想是的,将它放在getInstance()中,并仅在第一次调用此方法时调用它。我想这就是你想要的

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

    后者更好