2014-01-14 3 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() и назовите его только в первый раз, когда этот метод вызывается. Я думаю, это то, что вы хотите.

ИЛИ

Если вы используете какую-то рамку и рамка посылает вам событие, когда приложение инициализируется/готово, то вы можете также подключить туда и сделать это там. Но в этом случае он может начать выполнение даже до того, как клиент вызвал getInstance(). Это зависит от вас, чтобы решить, все в порядке или нет.

Последнее лучше ИМХО.

Смежные вопросы