Cтоит ли использовать отдельный поток для каждой задачи в Java?

Есть программа которая должна периодически выполнять некие действия(проверять БД на наличие новых записей, проверять наличие файлов и.т.д.).

Вопрос, стоит ли создавать отдельный поток для выполнения каждой из задач если учесть что большую часть времени эти потоки будут спать или просто обойтись обычным таймером?
  • Вопрос задан
  • 2937 просмотров
Решения вопроса 1
alexyat
@alexyat
iOS Developer
Если есть, какие-то события на которые приложение должно сразу отреагировать, то конечно потоки. Если основная задача приложение вот эти проверки, то таймера достаточно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanKiLL
@FanKiLL
Я бы сделал примерно так, если надо проверять раз в N времени.

public class Main {
  private static int period = 60; //Default period
  private static final TimeUnit PERIOD_TIME_UNIT = TimeUnit.MINUTES;

  public static void main(String[] args) {
		
  ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);

  System.out.println(String.format("Worker work period %d %s", period, PERIOD_TIME_UNIT));
  scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
			
    @Override
    public void run() {
      //код который должен запускатся по таймеру
    }
  }, 0, period, TimeUnit.MINUTES);				
  }
}


Ну а если это часть логики приложения, то использовал бы простой ThreadPoolExecutor собственно для этого у меня есть само писанный наподобие андроидовского AsyncTask класс с callback'ами onPostExecuteonPreExecutedoInBackground, которому отдаёшь Runnable он их выполняет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы