Поток или отдельные объекты экземпляров? - PullRequest
0 голосов
/ 23 марта 2011

Мое эмпирическое правило об использовании потока: если несколько экземпляров одного и того же объекта должны работать одновременно, используйте потоки. Но я сталкиваюсь с проблемой выбора дизайна в сценарии, подобном тому, который я описываю ниже. Пожалуйста, помогите мне уточнить это раз и навсегда:


(Повторное использование примера из моего предыдущего сообщение)
У меня есть 5 экземпляров объекта Pen, 100 авторских тем и 3 бумажных объекта экземпляров.
Любое количество авторов может использовать любое количество ручек, чтобы написать на любой данной бумаге.
Я создал блокировка очереди для защиты пера Авторы обращаются к объектам.
Если все ручки в очереди используются, Авторы ждут.
Экземпляры Pen Данные от автора темы и добавить его к (указанному) экземпляру бумаги.
После обновления Paper instance, Pen также обновляет вызывающий Автор нить.

Вопросы:

  • Есть ли ценность в управлении Pen объект как темы?
  • Если так, как бы я передавал данные из Автор темы в Pen поток так что поток пера может выполнить read (от автора) написать (на бумаге) и написать обратно (вернуться к вызову Author нить) безопасно?

1 Ответ

2 голосов
/ 23 марта 2011

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

Я бы реорганизовал дизайн, чтобы перенести функциональность с Ручек на Авторов. Также я бы попытался смоделировать авторов как Callable с (или Runnable с, если нет необходимости возвращать какой-либо результат) вместо потоков, и запустить их в Executor framework - это дает абстракции более высокого уровня для работы, в результате чего получается более чистый и безопасный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...