![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: нет Всего: 0 |
Ob'yasnite, please, kak rabotaet systema Listener-Event v multithreadinge, esli sobitie generiruetsya v odnom threade a slushateli v drugom...
I znayu, chto ves' Swing postroen na etom, t. e. imeetsya k-l Concurrent Queue , v kotorom sobirayutsya vse tipi swing eventov, i potom takzhe comcurrent raspredelyayutsya po listeneram...(tak ili poshti tak, izvenite ...). Kak zhe sdelat' tak chtobi kazhdiy Event nashel svoego slushatelya, v usloviyax multithreadinga??? |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
sol78, используй пожалуйста чекбокс Транслит, иначе текст тяжело воспринимается, да и честно говоря не до конца понимаю вопрос.
|
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: нет Всего: 0 |
powerOn, chto imenno ne ponyatno, i pricem sdes' GUI? |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Очередь Event-Queue одна и много потоков могут туда ставить свои задания. А обслуживает эту очередь один поток - извлекает из очереди по одному заданию и выполняет. Если задание - это событие, то поток идет к списку (наверное это ArrayList ) зарегистрированных слушателей - потребителей и всем подряд предлагает. Кому тип события подходит, тот его и принимает. А конкуренция, т.е. синхронизация, только на входе очереди. Там же одновременно разные потоки пытаются добавить задание.
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
||||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: нет Всего: 0 |
poprobuyu esche raz,
obichnaya sxema Listener-Event tut kak ona budet rabotat', esli event generiruetsya v odnom threade, a listeneri v drugom??? powerOn, nalishie slova Swing, ne oznachaet prinadlezhnost' k GUI! |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Объясни, что ты понимаешь, под "листенеры в другом потоке"? Листенер - это в итоге функция, которая вызывается при обработке события. Как тебе уже объясняли, событие после генерации попадает в очередь, из которой в отдельном (и единственном!) потоке обработки событий (если я не путаю, то он же и есть обычный свинговый поток, хотя в терминологии я малость "плаваю") поочерёдно берутся все события. Далее запускается обработка события листенерами. Всё в том же потоке. То есть, у тебя не могут быть листенеры разбросаны по куче потоков. Они все отрабатывают в одном и том же потоке. Нет, ну при желании конечно можно извратиться, но это уже не будет обычная работа свинга. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Ну вот я вас и не понял, поскольку читать транслит тяжело. Прочитав это предложение с учетом упоминания Swing events:
Мне подумалось что под Event это Swing-овое событие, которое нужно доставить в отдельный поток. Но мне не жалко, я могу и обратно в общие вопросы перенести |
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: нет Всего: 0 |
nornad, da mi tut pereskazivaem slova drug druga...
vopros ne kasaetsya neposredstveno Swinga... |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
Никак она не будет работать. Если ты не предусмотришь синхронизацию, то будут глюки. Если у тебя часть этих объектов принадлежит к графическому интерфейсу, то будет портиться интерфейс. Система событий-слушателей не имеет ничего общего с многопоточностью. Это она просто так называется. Типа "происходит" событие, на него "реагируют" слушатели. А на самом деле это просто жёстко синхронизированная последовательность вызовов функций в одном потоке. То есть, события и слушатели -- это просто метод логической организации взаимодействия между объектами, которые не могут быть асинхронными. Если объекты асинхронны (работают в разных потоках), то нужно как-то самому обеспечить синхронизацию. Например, пометить synchronized все методы, которые исполняют события. Другой способ -- использовать функцию SwingUtilities.invokeLater. Она обеспечивает запуск кода в том потоке, который выполняет Свинг. Тогда обычные объекты, синхронные со Свингом, будут испускать или выполнять события обычным образом, а асинхронные -- через эту функцию. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |