Ответ 1
Я бы лично пошел за (1) (создание 2 разных потоков одного и того же класса).
Я не чувствую, что для задания нужно создать 2 разных класса, которые могут выполняться двумя разными потоками одного и того же класса.
Хороший день для одновременного запуска нескольких потоков рекомендуется создавать различные объекты потока из класса или создавать два класса, в которых один реализует runnable и один расширяет поток, а затем создает потоковые объекты из обоих из них по мере необходимости, полагая, что мы пытаясь запустить 7-10 задач одновременно.
Спасибо. Советы оцениваются как всегда.
Я бы лично пошел за (1) (создание 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());
}
Я не думаю, что это важно, как вы это делаете. Если у вас будет много короткоживущих потоков, вам, вероятно, понадобится пул потоков, см. Java.util.concurrent.Executors. Обычно я создаю анонимный класс типа runnable, например.
executor.execute(new Runnable() {
//thread code goes here
});
Небольшая разница в производительности между созданием потока путем расширения Thread или путем внедрения Runnable и использования new Thread(runnable)
. Является ли использование одного класса или нескольких, также не имеет значения. Вы должны проектировать свою структуру класса на основе выполняемой работы; если два потока выполняют одну и ту же работу с разными данными, используйте тот же класс для обоих.
Доступ к общим данным (будь то статические переменные класса или что-то еще) всегда является большой проблемой.
Главное, что имеет значение, - это то, как вы разработали свою иерархию объектов: Если вы расширяете класс Thread, вы не можете расширять любые другие классы (Java является одиночным наследованием). поэтому, реализуя Runnable, вы все равно можете расширить другие классы в своей модели домена.