Вы могли бы хотеть назвать выполненным () в конкретном модульном тесте, который затронут строго с функциональностью а не с параллелизмом.
По крайней мере, в JVM 1.6., существует немного проверки, и выполненный назван исходно:
public synchronized void start() {
/**
* This method is not invoked for the main method thread or "system"
* group threads created/set up by the VM. Any new functionality added
* to this method in the future may have to also be added to the VM.
*
* A zero status value corresponds to state "NEW".
*/
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
start0();
if (stopBeforeStart) {
stop0(throwableFromStop);
}
}
private native void start0();
Предположение, что Вы знаете запуск и выполняете использование метода т.е. синхронный по сравнению с асинхронным; выполненный метод может использоваться только для тестирования функциональности.
Плюс при некоторых обстоятельствах, тот же класс потока может использоваться в двух различных местах с синхронизирующими и асинхронными требованиями к функциональности при наличии двух различных объектов с методом выполнения и вызываемым методом запуска других.
Если Вы хотите выполниться, содержание выполненных () как Вы было бы любого другого метода. Не запустить поток, конечно.
Когда Вы хотите, чтобы он работал синхронно. Вызов метода выполнения на самом деле не даст Вам многопоточность. Метод запуска создает новый поток, который называет метод выполнения.
Звоните thread.start()
, это будет в свою очередь звонить thread.run()
. Не может думать о случае, когда Вы хотели бы обойти thread.start()
и перейти непосредственно в thread.run()
На это уже сослались, но только быть ясным: создание нового потока возражает только для вызова, оно работало (), метод является напрасно дорогим и должен быть главным красным флагом. Это был бы намного лучший, более разъединенный дизайн для создания Выполнимого impl и любого (a) звоните , это выполнено () метод непосредственно, если это - желаемое поведение, или (b) создайте новый поток с этим Выполнимым и запустите Поток.
Еще лучше, еще для большего количества разъединения, выезд эти Executor
интерфейс и платформа в JDK 5 и более новый. Это позволяет Вам, короче говоря для разъединения выполнения задачи (Выполнимый экземпляр) от , как это выполняется (реализация Исполнителя, которая могла бы выполнить Выполнимое в текущем потоке, в новом потоке, с помощью существующего Потока от пула и этажерки).
Принятая форма Java Стиля кода распараллеливает FAQ:
Q: каково различие между запуском потока () и выполненный () методы?
А: отдельный запуск () и выполненный () методы в классе Потока обеспечивает два способа создать поточные программы. Запуск () метод запускает выполнение нового потока и называет выполнение () методом. Запуск () метод сразу возвращается, и новый поток обычно продолжается до выполнения () возвраты метода.
выполнение класса Потока () метод ничего не делает, таким образом, подклассы должны переопределить метод с кодом для выполнения во втором потоке. Если Поток инстанцируют с Выполнимым аргументом, выполнение потока (), метод выполняет выполнение () метод Выполнимого объекта в новом потоке вместо этого.
В зависимости от природы Вашей потоковой программы, называя Поток выполненным () метод непосредственно может дать тот же вывод как звонящий через запуск () метод, но в последнем случае код на самом деле выполнен в новом потоке.
Никогда. Вызов выполненного () непосредственно просто выполняет код синхронно (в том же потоке), точно так же, как нормальный вызов метода.