2012-04-09 4 views
3

Я читаю многопоточное программирование на Java. В java-книге говорится, что выделение задачи из потока является предпочтительным дизайном. Я без понятия что это значит.Что это означает, отделяя задачу от потока?

Из чего я понимаю, лучше использовать инструменты Runnable вместо продолжения Threads. Я просто не понимаю, почему это так.

Почему внедрение лучше, чем расширение? И когда вы будете использовать расширение?

ответ

4

Важным принципом в разработке программного обеспечения является разделение задач:. Каждый модуль/объект/класс/метод должен имеют только одну четко определенную ответственность.

Класс Thread смешивает две проблемы:

  • specifiying последовательность шагов, которые должны выполняться (с выполняемым)

  • , взаимодействующие с системой выполнения для управления, как реализовать выполнение этой последовательности (в этом случае с помощью выделенной процессорной нити)

Программу-программисту не нужно заботиться о том, что вторая part: ей просто нужно записать код, который она хочет выполнить, т. е. реализовать Runnable.

Этот Runnable может быть выполнен несколькими способами, например, путем запуска нового потока, но также путем предоставления ему ExecutionService. Эта гибкость исчезает, когда вы жестко кодируете свой runnable в Thread.

+0

+1 Очень красиво положил. – Santosh

3

Преимущество Runnable состоит в том, что вы можете передать Runnable другим вещам, кроме конструктора Thread. Например, вы можете использовать их в сочетании с новыми структурами параллелизма.

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

0

Логически отношения IS-A не должны иметь отношения к концепции композиции.

Таким образом, расширение класса Thread «полезно», когда вы хотите создать пользовательский поток, это преимущество всех супер-методов или переопределить методы certains => В этом случае для класса Thread это в большинстве случаев бесполезно.

Кроме того, расширение Thread препятствует расширению необходимого бизнес-класса, например, с интерфейсом, вы все равно можете перейти от класса, который вы хотите.

Нам всегда нужно задаться вопросом, нужен ли новому классу концепция или концепция.

НУЖНА Тема для бизнес-класса, поэтому она может отделить ее от всего понятия Threading => So Runnable достаточно света для маскировки.

Смежные вопросы