2014-01-14 239 views
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方法的后台线程调用..是否是正确的地方放在那里?

回答

1

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

OR

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

后者是更好的恕我直言。

相关问题