При многопоточном программировании в java для каждого Thread-а нужно создавать отдельный класс?

программирование java

При многопоточном программировании в java для каждого Thread-а нужно создавать отдельный класс?
Ответы:
при старте процесса операционная система выделяет ему память и запускает главный поток. сколько бы потоков не было память процесса (там где мы создаем объекты) для них (для потоков) общая. у потоков только стек у каждого свой.
> При многопоточном программировании в java для каждого Thread-а
> нужно создавать отдельный класс?
Если речь не идет о java.util.concurrent, то обязательно нужно. Другое дело, что не обязательно помещать тот, код который вы хотите выполнить в новом потоке в класс унаследованный от класса Thread, вместо этого можно реализовать интерфейс Runnable и скормить классу Thread экземпляр вашего объекта (который реализует интерфейс Runnable).
Класс Thread представляет собой один поток и если вам нужно несколько потоков, то у вас будет несколько классов Thread.
Что касается интерфейса Runnable, то он "определяет" шаблон задачи, которую можно запустить на выполнение, ни о какой многопоточности здесь не идет и речи. Т.е. когда мы имплементируем этот интерфейс, то у нас есть только метод run, при вызове этого метода нового потока не создается. Новый поток создает класс Thread, которому мы передаем экземпляр класса имплиментирующего интерфейс Runnable. Класс Thread создает новый поток, перемещает туда наш объект и вызывает у него метод run.
Если говорить о java.util.concurrent, то там есть более удобные способы реализации многопоточности, чем работа с классом Thread напрямую (например, всякого рода экзекьюторы или можно присмотреться к Fork/Join).
В java есть два способа создать поток - отнаследоваться от класса Thread и переопределить метод run() или имплементировать Runnable и опять же переопределить метод run()
Ты очень плохо задал вопрос - непонятно что именно ты пытаешься сделать.
Если ты создал класс MyThread extends Thread, то запустить его после инициализации ты можешь только один раз:
MyThread myThread = new MyThread();
myThread.start();
//myThread.start(); -- повторый вызов выбросит IllegalStateException
//для запуска еще одного потока нужно создавать еще один объект класса MyThread.
MyThread myThread2 = new MyThread();
myThread2.start();
//=================================//
Если же у тебя есть какой-нибудь класс MyClass implements Runnable:
MyClass myClass = new MyClass();
Thread thread1 = new Thread(myClass);
Thread thread2 = new Thread(myClass);
thread1.start();
thread2.start();


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.