Понимание параллелизма Java с потоком - PullRequest
1 голос
/ 17 апреля 2011

В настоящее время я читаю учебник по параллелизму Java в http://tutorials.jenkov.com/java-concurrency/creating-and-starting-threads.html

Я не мог понять, какие следующие строки под "Подкласс или Runnable?"

При выполнении Runnable, выполняемого пулом потоков, легко помещать в очередь экземпляры Runnable, пока поток из пула не будет свободен.

Ответы [ 4 ]

1 голос
/ 17 апреля 2011

Как указывается в статье, они оба "работают", хотя в целом вы должны использовать Runnable (или, если нужны аргументы / результат Callable с Future), а не подклассы Thread.Как вы заметили, это более гибкий подход - он отделяет то, что исполняется, от того, кто его выполняет.Расширение Thread излишне объединяет эти две концепции в одном и том же экземпляре, нарушая принцип ОО единственная ответственность .

Иногда вам придется реализовывать исполняемый код как подкласс Thread, когда вашрука вынуждена API.Например, Runtime. addShutdownHook (Thread) требует, чтобы ваш код, выполняемый при завершении работы, был зарегистрирован как экземпляр Thread.Но если вы не имеете дело с одним из этих конкретных случаев, всегда используйте Runnable.

0 голосов
/ 09 апреля 2015

Дженков идет дальше в своем руководстве по параллелизму, чтобы описать фиксированные и кэшированные пулы потоков, используя фабричные методы ExecutorService.Посмотрите здесь: http://tutorials.jenkov.com/java-util-concurrent/executorservice.html. С помощью утилит параллелизма Java, которые создают эти пулы потоков, проще использовать runnables.

0 голосов
/ 17 апреля 2011

Дженков подчеркивает, что выбор между реализацией Subclass или Runnable обусловлен предпочтением, если что-либо еще.

Он ссылается на шаблон пула потоков в качестве примера, почему реализация исполняемого интерфейса более гибкая. Я поддерживаю его первоначальную гипотезу, но в основном потому, что объект Runnable может создавать подкласс класса, отличного от Thread.

Я не совсем понимаю, как создание пулов потоков будет , что более громоздким с подклассами потоков с нативными библиотеками java, т.е. java.util.concurrent.ThreadPoolExecutor . Я бы хотел, чтобы Дженков привел пример ...

0 голосов
/ 17 апреля 2011

Автор просто хочет сообщить, что, по его словам, Runnables проще использовать с пулами потоков.Концепция пула потоков заключается в том, что у вас может быть фиксированное количество потоков (скажем, 10), ожидающих выполнения заданий.Если все 10 из них заняты выполнением потоков, ожидающая работа может быть поставлена ​​в очередь, пока один из этих потоков из пула не освободится.

...