|
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
|
||||||||||||||||
Переход с Thread на Concurrent11.11.2018, 21:02. Показов 1712. Ответов 8
Сижу в раздумьях. Как и попытка перехода на JavaFX, попытка перейти на Concurrent вызвала лишь массу недоумений:
Я пишу, для обучения, практики, сетевой чат. Всё работает! При запуске Клиента запускается этот поток: (breakerFlag - просто флаг, переключающийся перед закрытием программы, для верности; connected - переходит в true после успешного подключения к Серверу и обратно - при дисконнекте; onReceieveString(in.readUTF()); - вынесенный код, читающий из потока, т.е. in и out - ридер и врайтер из сокета сервера; Лонг was изначально равен 0. так что при первом входе он всегда меньше 30000 и идет попытка коннекта)
То-есть, даже если коннекта нет - по таймеру в 30 сек идет повтор. Итак! Сегодня я подумал - уже время прошло, есть всеми любимый, удобный и востребованный пакет Concurrent! Надо переписать код на него. Почитал, посмотрел примеры, сделал так:
Я думаю - наверное тут бесконечный поток, как-то блокируется ожиданием коннекта иначе и т.п. надо разбираться.. Но и сообщения начали уходить лишь на Сервер. Не принимаются назад вообще, хоть Клиент и появляется как прежде в списке клиентов там. Тогда я подумал о Семафорах. Так же использую впервые, чтоб их.. Посмотрел, почитал. Понял, что можно создать Конкурент-пул из нескольких потоков, а на трудный участок пустить только несколько, остальные может обойдут, как в оригинальном коде, проблемный участок и всетки начнут слежение за таймером.. Я переписал код с Семафором:
При запуске без серва или дисконнекте - все так же намертво и навсегда вешается. Сообщения так же идут Только на сервер, в одну сторону. Как я понял, теперь тупо все потоки стоят в очереди на коннект, который недоступен и некому следить за таймером переподключения, с которым великолепно справляется оригинальный thread. И вот вопрос - что же это за чудесный Конкурент, используя который надо так дико выплясывать с бубнами? Подскажите, как все же НАДО правильно обрабатывать такие места, чтобы код корректно работал, как в оригинале?.. Еще раз: В оригинале с Thread, если запустить Клиента без Сервера, но затем запустить Сервер - Клиент подключится сам к нему в течении следующих 30 сек, так как ищет его каждые 30 сек. В одном потоке. В варианте с Конкуренси - даже включение Сервера уже никогда не вернет Клиента к жизни. Благодарю заранее.
0
|
||||||||||||||||
| 11.11.2018, 21:02 | |
|
Ответы с готовыми решениями:
8
Решение задачи с использованием пакета concurrent Непонятки в Java. Chain method call. Thread.start() vs Thread.run() |
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 12.11.2018, 01:28 | ||
|
Так же куда делся цикл в версии с потоками? В целом очень похоже на программирование методом тыка...
0
|
||
|
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
|
||||||||
| 12.11.2018, 08:06 [ТС] | ||||||||
|
Так ведь.. я же не менял суть кода и логику..
Просто заменил тело Thread на тело Concurent-а Проверю, устал просто пока. Посмотрю, конечно. Может просто были у кого уже такие моменты и были разобраны и выяснены. Добавлено через 3 минуты Приведу полный код Основного класса Клиента, хоть проблема вроде и лишь в методе потока.. Но может поможет с определением проблемы: (закомментирован старый блок, с которым все работает корректно)
0
|
||||||||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|||
| 12.11.2018, 09:03 | |||
|
0
|
|||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 12.11.2018, 09:53 | |
Сообщение было отмечено KiraLis39 как решение
Решение
KiraLis39, ваще жесть какая-то написана. Похоже ты просто не понимаешь тему конкаренси. Попробуй простых примеров пописать для начала. У тебя переменная was общая для всех потоков. Подумай как себя будет вести первый и последующие потоки.
1
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
||
| 12.11.2018, 10:10 | ||
|
0
|
||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 12.11.2018, 10:28 | ||
|
0
|
||
|
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
|
|||
| 12.11.2018, 15:24 [ТС] | |||
|
Добавлено через 2 минуты Видимо, нет здесь готовых, простых решений. Что поделать..
0
|
|||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|
| 12.11.2018, 16:15 | |
|
0
|
|
| 12.11.2018, 16:15 | |
|
Помогаю со студенческими работами здесь
9
Неоднозначный вызов следующих методов или свойств - Thread.Thread() Пустые методы в перечислении java.util.concurrent.TimeUnit Передать данные в работающий thread из другого thread
Разработать многопоточное приложение. Использовать возможности, предоставляемые пакетом java.util.concurrent Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|