Реализует 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
Итак, если java мы заменим их runnable
на ваш threadA
, мы threading получим следующее:
new FutureTask
Другой 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
Реализует Runnable "vs" extends Thread "в Java
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.