Подтвердить что ты не робот

Одновременное выполнение нескольких потоков

Хороший день для одновременного запуска нескольких потоков рекомендуется создавать различные объекты потока из класса или создавать два класса, в которых один реализует runnable и один расширяет поток, а затем создает потоковые объекты из обоих из них по мере необходимости, полагая, что мы пытаясь запустить 7-10 задач одновременно.

  • Каковы наилучшие решения?..
  • Есть ли какие-либо подводные камни или производительность, если вы создаете разные объекты потоков из одного класса?.

Спасибо. Советы оцениваются как всегда.

4b9b3361

Ответ 1

Я бы лично пошел за (1) (создание 2 разных потоков одного и того же класса).

Я не чувствую, что для задания нужно создать 2 разных класса, которые могут выполняться двумя разными потоками одного и того же класса.

Ответ 2

  • Взгляните на большой пакет java.util.concurrent
  • Нет ошибок производительности при создании различных объектов потока из одного класса.

Вот короткий пример:

private static class SomeTask implements Runnable
{
  @Override
  public void run()
  {
    doSomething();
  }
}

public static void main(String[] args)
{
  ExecutorService executor = Executors.newCachedThreadPool();
  for (int i = 0; i < 8; i++) executor.execute(new SomeTask());
}

Ответ 3

Я не думаю, что это важно, как вы это делаете. Если у вас будет много короткоживущих потоков, вам, вероятно, понадобится пул потоков, см. Java.util.concurrent.Executors. Обычно я создаю анонимный класс типа runnable, например.

executor.execute(new Runnable() {
    //thread code goes here
});

Ответ 4

Небольшая разница в производительности между созданием потока путем расширения Thread или путем внедрения Runnable и использования new Thread(runnable). Является ли использование одного класса или нескольких, также не имеет значения. Вы должны проектировать свою структуру класса на основе выполняемой работы; если два потока выполняют одну и ту же работу с разными данными, используйте тот же класс для обоих.

Доступ к общим данным (будь то статические переменные класса или что-то еще) всегда является большой проблемой.

Ответ 5

Главное, что имеет значение, - это то, как вы разработали свою иерархию объектов: Если вы расширяете класс Thread, вы не можете расширять любые другие классы (Java является одиночным наследованием). поэтому, реализуя Runnable, вы все равно можете расширить другие классы в своей модели домена.