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,时间单位为秒);
}
}
//... 一些代码
}
问题陈述:-
getInstance
方法中。。放在那里对吗我想是的,将它放在getInstance()中,并仅在第一次调用此方法时调用它。我想这就是你想要的 或 如果您正在使用某个框架,并且该框架在应用程序初始化/准备就绪时向您发送一个事件,那么您也可以在那里挂接并在那里执行操作。但在这种情况下,它甚至可能在客户调用getInstance()之前就开始执行。这取决于你来决定是否可以 后者更好