Реализует Runnable "vs" extends Thread "в Java

tl; dr: лучше реализует Runnable. Однако важно сделать одно предостережение.

В общем, я бы рекомендовал java использовать что-то вроде javax Runnable, а не Thread, потому что это позволяет jdk вам лишь слабо увязать вашу cross-threading работу с вашим выбором параллелизма. Например, если multithreading вы используете Runnable и позже решите, что implements для этого фактически не требуется java-threads собственный Thread, вы можете просто openjdk вызвать threadA.run().

Предостережение: здесь threads я настоятельно не рекомендую j2se использовать необработанные cross-threading темы. Я предпочитаю использовать java Callables и FutureTasks (из javadoc: «Отменяемое java асинхронное вычисление»). Интеграция cross-threading тайм-аутов, правильной отмены multi-threaded и объединения потоков современной multithread поддержки параллелизма - все implements это для меня гораздо полезнее, чем multi-threaded груды сырых потоков.

Продолжение: существует javax FutureTask constructor, который позволяет вам использовать javax Runnables (если это то, что multithreading вам удобнее всего) и при threading этом пользоваться преимуществами multi-threaded современных инструментов openjdk параллелизма. To quote the javadoc:

Если вам не implements нужен конкретный результат, рассмотрите oraclejdk возможность использования runnable конструкций вида:

Future f = new FutureTask(runnable, null)

Итак, если java мы заменим их runnable на ваш threadA, мы threading получим следующее:

new FutureTask(threadA, null)

Другой cross-threading вариант, который позволяет java вам оставаться ближе к Runnables, - это runnable ThreadPoolExecutor. Вы можете использовать thread метод execute для передачи Runnable oraclejdk для выполнения «данной задачи openjdk когда-нибудь в будущем».

Если jdk вы хотите попробовать использовать multithreading пул потоков, приведенный openjdk выше фрагмент кода будет jdk выглядеть примерно так (с multithread использованием фабричного multithreading метода Executors.newCachedThreadPool()):

ExecutorService es = Executors.newCachedThreadPool();
es.execute(new ThreadA());

java

multithreading

runnable

implements

java-threads

2022-11-21T09:28:14+00:00