2014-01-14 296 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()之前開始執行。這取決於你決定是否可以。

後者是更好的恕我直言。

相關問題