|
|
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Допустим есть некий главный Thread и еще какая-то группа Thread-ов. Можно ли сделать так, что бы при возникновении какого-то события в одном из тредов, этот самый тред вызывал метод главного треда и этот метод выполнялся в контексте главного треда? Т.е по простому... один из потоков дает команду главному потоку что-то сделать и это самое "что-то сделать" выполняет главный поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 04:38 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
Мыслите не потоками а событиями. Ваша задача легко решается очередью, произошло событие, положили его в очередь, главный поток постоянно висит на очереди и обрабатывает события ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 04:42 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavel, а в каком смысле контекст потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 09:16 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavelЗдравствуйте. Допустим есть некий главный Thread и еще какая-то группа Thread-ов. Можно ли сделать так, что бы при возникновении какого-то события в одном из тредов, этот самый тред вызывал метод главного треда и этот метод выполнялся в контексте главного треда? Т.е по простому... один из потоков дает команду главному потоку что-то сделать и это самое "что-то сделать" выполняет главный поток. В такой постановке задачи точно нельзя. Подобные механизмы реализуются через очередь событий, но сказать подходит ли это для решения вашей проблемы сложно. Поэтому обрисуйте лучше свою проблему, а не решение, которое вам видится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 10:58 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Вот эта проблема. Хотел сделать очередь добавления и удаления сессий. Чтобы бы один поток писал и удалял элементы их мапы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 16:30 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavelВот эта проблема. Хотел сделать очередь добавления и удаления сессий. Чтобы бы один поток писал и удалял элементы их мапы. Проще простого. Заводишь один единственный ThreadPoolExecutor размером в один поток. И из других потоков просто сабмитишь в него задачи. А этот executor выполняет какую-то одну задачу синхронно в своём единственном потоке. Соответственно это код не нужно дополнитльно защищать от конкурентного доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 16:37 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
BlazkowiczGorloPavelВот эта проблема. Хотел сделать очередь добавления и удаления сессий. Чтобы бы один поток писал и удалял элементы их мапы. Проще простого. Заводишь один единственный ThreadPoolExecutor размером в один поток. И из других потоков просто сабмитишь в него задачи. А этот executor выполняет какую-то одну задачу синхронно в своём единственном потоке. Соответственно это код не нужно дополнитльно защищать от конкурентного доступа. Как я понимаю мне поможет ExecutorService на один поток и реализация интерфейса Callable для моего класса? Если не трудно, то покажите пример. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2014, 09:25 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavelКак я понимаю мне поможет ExecutorService на один поток и реализация интерфейса Callable для моего класса? Если не трудно, то покажите пример. Спасибо!Пример как создать ExecutorService и вызвать на нем Runnable/Callable? Ну это можно и самому нагуглить, или в JavaDoc посмотреть. Не ленитесь, это элементарнейшая вещь. Если вы и дальше будете так на каждый элементарный шаг просить помощи, то перспективы вашего профессионального развития будут очень туманными. Что касается однопоточного экзекьютора, учтите, что в вашей задаче много долгих операций, а так же блокирующих операций. В одном потоке это (обслуживание многих клиентов), как минимум, работать очень медленное, а как максимум - вообще не будет работать. Поэтому я бы вам рекомендовал не в одном потоке все делать, а написать нормальную синхронизацию. Если все же хотите один поток, то тогда вам скорее всего надо переходить с IO на NIO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2014, 12:42 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavel , Вообще, что бы избежать очередного многостраничного топика, где никто ничего не понимает, лучше дайте полное описание задачи. Упрощенное, без лишних деталей, но чтобы было понятно, чего вы хотите добиться. Я более, чем уверен, что там достаточно незамысловатая задача, которую спокойно можно решить в многопоточном режиме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2014, 12:52 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
cdtyjv, Конечно задача там не сложная, вот только непонятно, зачем вместо очевидных вещей (GUID например), которые могут быть использованы на среднем (апп сервер) уровне изобретать костыль в виде получения уникального идентификатора сессии из таблицы БД? Ну в общем, архитектура кривая и непродуманная - отсюда и сложности с реализацией... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 20:23 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavel,авторЭто поток(Thread) сокета. В нем обрабатываются данные от клиента и к примеру при авторизации эта сессия добавляется в HashMap. При потере соединения сессия должна удалить себя из HashMap и БД. у нас нет никакой библиотеки выше уровня для создания списка юзер-сессий? Если её нет, то зачем вам постоянно актуальный список на 1000 пользователей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 11:03 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
Вообщем суть вот в чем. Есть поток коорый принимает подключения Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. При каждом подключении SESSONS_COUNT++. Так я могу знать сколько подключений активно. Сам клиент при отключении как-то должен уменьшать это число. Но ведь событие отключения тоже происходит в другом потоке. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 14:32 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavel , А вопрос в чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 14:57 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
GorloPavel, раз у тебя всё Асинхронно и Потоково, то использовать твой счётчик не представляется возможным. Разве не так? Опять идём к постановке задачи и велосипедам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 15:00 |
|
||
|
Задача с потоками
|
|||
|---|---|---|---|
|
#18+
cdtyjv GorloPavel , А вопрос в чем? В том как изменять это число правильно. Ведь из разных потоков как выясняется нельзя. Обернуть в synhronized? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=191&tid=2127824]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 355ms |

| 0 / 0 |
