С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 14.02.2012
Сообщений: 34

Многопоточность: вызвать метод главного потока из второстепенного потока

21.02.2017, 16:52. Показов 2582. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Эта тема всеми избита, знаю.
Но у меня очень ограничено время, поэтому рискую и пишу вопрос тут:

Пишу приложение консольное.
Оно обращается на сервер, что-то скачивает, потом показывает на экране.
Цель - запускать обращение на сервер в отдельном потоке, и когда данные скачаются, показать на экране.
Нужно - передать во второстепенный поток один объект (строку с командой), а когда он отработает, вызвать метод в главном потоке, передав туда другой объект (строку с результатом).
Я уже три часа не могу найти подходящую конструкцию. О_О Помогите, пожалуйста.
Как минимум, по какой теме гуглить. (уже использовал Runnable, Callable, но ощущение, что они не подходят, нужно что-то ещё)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2017, 16:52
Ответы с готовыми решениями:

Многопоточность. Управление потоками из главного потока
Добра! Читал в интернете про потоки в Java и возник вопрос, например есть поток "player" и в нем воспроизводится аудиофайл ...

Многопоточность. Как завершить неисполльзуемые потоки из главного потока
Привет. Буду рад любым идеям и замечаниям. Пишу многопоточный сокет сервер. Архитектура такая. Есть форма. На форме кнопка. Кнопка...

Обращение к методу главного потока из второстепенного
Доброе утро! Возникла следующая проблема: хочу по окончании каждого фонового потока выводить на форму символ, сигнализирующий об его...

9
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
21.02.2017, 17:55
Типа навскидку:
- во второстепенном потоке в глобальную переменную заносишь результат стринга;
- В главном потоке при помощи join ждешь втор. поток.
- ну и потом выводишь сообщение из стринга.

Смотри только чтобы в стринг никто не писал, кроме втор. потока. Если кто-то ещё пишет делай стринг volatile или делай синхронизацию по объекту.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
21.02.2017, 18:58
Ksar13th, если нужно только написать на экране, пишите из второстепенного потока. Никаких проблем не должно быть.
Если хотите именно ждать ответа тогда неочень понятно зачем вам поток создавать если вы все равно его ждать будите, но можете использовать Future. Даст тот же эффект что написал FreakMurderer, но написано будет человеческим языком.
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
21.02.2017, 19:10
Почему это "Future" - человеческий язык, а стандартный Thread.join - не человеческий. Какое-то непонятное определение "человечности". К тому же, не уверен, но в недрах future по ходу и используется тот же join(или вернее Object.wait и object.notify)
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
21.02.2017, 21:19
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если хотите именно ждать ответа тогда неочень понятно зачем вам поток создавать если вы все равно его ждать будите
Возможно, между отправкой запроса и ожидание результата, он хочет сделать что-то ещё, пока запрос обрабатывается.

Цитата Сообщение от FreakMurderer Посмотреть сообщение
Почему это "Future" - человеческий язык, а стандартный Thread.join - не человеческий
Потому что без необходимости вручную морочиться со всякой фигней типа
Цитата Сообщение от FreakMurderer Посмотреть сообщение
Смотри только чтобы в стринг никто не писал, кроме втор. потока. Если кто-то ещё пишет делай стринг volatile или делай синхронизацию по объекту.
Цитата Сообщение от FreakMurderer Посмотреть сообщение
но в недрах future по ходу и используется тот же join(или вернее Object.wait и object.notify)
А в недрах String — массив char, так давайте использовать массив char вместо String, так что ли? И вообще, зачем нам Java, в результате это всё равно команды процессора, так давайте писать на ассемблере!
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
21.02.2017, 22:52
А в недрах String — массив char, так давайте использовать массив char вместо String, так что ли?
Это вы, уважаемый, уже перегибаете палочку немного. Ну если хотите: зачем учиться ходить, можно сразу научиться ездить на автомобиле. Но чтобы это сделать, надо сперва дойти до автосалона. Это во первых.
Во вторых - давать новичку, которому нужно решить простенькую задачу из нескольких строк кода на вооружение высокоуровневую хрень, где нужно гоородить тонны лишних объектов, не пытаясь посвятить в базовые понятия как это работает - имхо мне как-то не по себе становится. Новичек набравшись базового опыта, должен потом сам для себя решить когда ему использовать средства из java.util.concurrent, а то в противном случае если что-то сломается или как-то придётся писать нестандартный код и человек будет чесать репу

Добавлено через 1 час 9 минут
...
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
21.02.2017, 23:15
Цитата Сообщение от FreakMurderer Посмотреть сообщение
Это вы, уважаемый, уже перегибаете палочку немного. Ну если хотите: зачем учиться ходить, можно сразу научиться ездить на автомобиле. Но чтобы это сделать, надо сперва дойти до автосалона. Это во первых.
Во вторых - давать новичку, которому нужно решить простенькую задачу из нескольких строк кода на вооружение высокоуровневую хрень, где нужно гоородить тонны лишних объектов, не пытаясь посвятить в базовые понятия как это работает - имхо мне как-то не по себе становится. Новичек набравшись базового опыта, должен потом сам для себя решить когда ему использовать средства из java.util.concurrent, а то в противном случае если что-то сломается или как-то придётся писать нестандартный код
Ну так пусть начинает с ассемблера, потом Си, управление памятью, указатели, ядро какой-нибудь операционки изучит, потом спеки JVM, вот это всё. А то ишь, ходить ещё не научился, а уже за автомобиль сел с GC и прочими наворотами. А то вдруг что пойдёт не так, придётся репу чесать и поминать разных там недоразработчиков из Sun.
0
21.02.2017, 23:19

Не по теме:

FreakMurderer, Первый раз вижу столько минусов в репе. Друже, как ты умудрился?

0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
22.02.2017, 00:41
Дальнейший оффтоп будет удален.
Думаю ТС получил достаточно вариантов решения проблемы а так же других ценных советов.
0
22.02.2017, 10:13

Не по теме:

Я ещё добавлю, что ни один педагог будь он младшего или старшего звена, не пустит в конкаррент не преподав до этого примитивы синхронизации, волатайлы и другие стандартные методы. Ни один курс, или трейнинг по многопоточности без этого не обходится. Это ведь не просто так, не от балды идет. Как говорится не зная Runnable не лезь в Callable

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.02.2017, 10:13
Помогаю со студенческими работами здесь

Как вызвать метод из главного потока находясь в созданом
Добрый день.. Создал поток, в котором срабатывает метод класса (который проверяет ключ на сервере), метод возращает bool-переменную....

Выполнение слота основного потока через сигнал второстепенного потока
Доброго времени суток! Вопрос следующий. В основном потоке создается кнопка и Qlabel class Ui_QtGuiApp4Class { public: //...

Вызов метода основного потока из второстепенного потока
Здравствуйте! Столкнулся с проблемой: есть два потока (основной и не основной), мне нужно вызвать из не основного потока метод, который...

Как вызвать методы Unity вне главного потока?
Привет. У меня есть асинхронный сервер и клиент. И вся инфа, которая приходит от сервера к клиенту, обрабатывается в отдельном потоке, но...

Не получается с вторичного потока обратиться напрямую к объекту из главного потока
Добрый день. Проблема заключается в том что не могу в WPF с вторичного потока обратится на прямую к объекту из главного потока. WPF пока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru