Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331

Синхронизация между потоками

16.05.2016, 13:03. Показов 1427. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот, например у меня есть основной Ui поток и поток Thread который он породил. И Tread меняет какую то переменную (ну или массив целый) и я хочу, чтобы об этих измениях узнал Ui поток. Ну понятно есть механизмы Handler там Broadcast и прочее. А как нибудь без них можно например обьявить переменную volatile там, опрашивать ее состояние через определенный промежуток времени в Ui потоке(ну там средства синхронизации могут помочь)? В ручную как нибудь можно это сделать без Handler, Broadcast там? или не стоит заморачиваться?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2016, 13:03
Ответы с готовыми решениями:

Передача данных между потоками
Всем доброго времени суток. В общем есть приложение, которое парсит сайт с музыкой, добавляет результат в listView и затем выводит...

EventBus и обмен событиями между потоками
Допустим у меня есть один фоновый thread и второй. Могу ли я через eventBus послать event из первого потока второму для обработки? Если да...

Синхронизация данных приложения между устройствами
Здравствуйте! Необходимо осуществить синхронизацию данных приложения на разных устройствах пользователя, т.е. есть бд, нужно, чтобы когда...

18
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
16.05.2016, 18:16
yura91, можно все что угодно я к примеру делаю хандлер который раз в 0.5 с проверяет флажок сигнализирующий о завершении обработки
0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
16.05.2016, 18:37  [ТС]
Ну это же handler а на уровне Thread как подобное можно реализовать?
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
16.05.2016, 18:52
yura91, слова "опрашивать с периодом времени" обычно наталкивают на мысль об ошибках проектирования. ИМХО, правильнее было бы callback
2
16.05.2016, 19:02

Не по теме:

я несколько раз начинал писать сообщение про callback-и и observable поля, но останавливался )

0
3 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,331
16.05.2016, 19:11  [ТС]
Паблито, а можете хотя бы сейчас написать про эти поля? Мне бы интересно было бы узнать о них?
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.05.2016, 19:17
Цитата Сообщение от YuraAAA Посмотреть сообщение
правильнее было бы callback
я тоже так думаю

Цитата Сообщение от yura91 Посмотреть сообщение
Мне бы интересно было бы узнать о них
https://www.google.com.ua/sear... observable
1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
16.05.2016, 19:53
Цитата Сообщение от YuraAAA Посмотреть сообщение
наталкивают на мысль об ошибках проектирования
карандаш работает и это гут) в свое время пытался найти серебряную пулю от того что из потока нельзя позвать форму. остановился на постоянно жужащем хандлере как на решении которое здесь и сейчас будет работать просто потому что там как то так и написано - для передачи используйте хандлер. так на том и остался. читал что то тут про обсервы и даже в свое время был восхищен но что то заставило оставить все как есть. видимо были причины не вспомнить уже)
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.05.2016, 20:05
вся суть этих обсерверов - слушатели
тупо в класс передается ссылка на слушателя
как только рассчеты окончены - на слушателе дергается какой-то метод
и все )
1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
16.05.2016, 20:30
Паблито, это же андроид там все просто и все сложно в свое время мне половину головы оторвало только лишь от того что активити пересоздавалось из за поворота экрана или вообще из за того что так захотелось системе
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
16.05.2016, 23:46
vxg, Event Driven!

1. тред
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class SomeThread implements Runnable {
 
    private boolean changeableVariable;
 
    private void setChangeableVariable(boolean changeableVariable) {
        this.changeableVariable = changeableVariable;
        EventBus.getDefault().postSticky(changeableVariable);
    }
 
    @Override
    public void run() {
        for (;;) {
             setChangeableVariable(new Random().nextBoolean());
        }
    }
}
2. UI
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class TargetActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Executors.newSingleThreadExecutor().submit(new SomeThread());
    }
 
    @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
    public void onBooleanVariableChanged(boolean data) {
        
    }
}
На пересоздание активити - наплевать
1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
17.05.2016, 07:37
Цитата Сообщение от YuraAAA Посмотреть сообщение
На пересоздание активити - наплевать
модельная ситуация. создается активити, запускается поток, в потоке так или иначе сохраняется ссылка на активити для обратного вызова при завершении задачи. система убивает активити (например от поворота экрана или потому что ей так захотелось может памяти мало или еще чего - не знаю правда может ли она выгружать отдельные активити при нехватке без выгрузки приложения но не в этом суть) - система "убивает" ее, но на самом деле убить не может так как на нее есть ссылка из потока. после поворота экрана создается новое активити + у нас остается активити-зомби в которое придет обратный вызов и непонятно что там сделает с контролами-трупами...
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.05.2016, 10:01
про пересоздание активити я уже писал - пересоздание можно отключать в манифесте
оно реально нужно только если для разных ориентаций используются разные файлы разметки, в этом случае пересоздание требуется что бы отработал onCreate вместе с setContentView()

даже если пересоздание было, спасают разные лоадеры, которые отслеживают изменение контекста
или вообще делать на ивентах
1
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
17.05.2016, 10:44
vxg, в моём примере нет этой ситуации. Правда, я забыл кое что)
В активити
onPause -> EventBus.getDefault().unregister(this);
onResume -> EventBus.getDefault().register(this);

Цитата Сообщение от Паблито Посмотреть сообщение
или вообще делать на ивентах
Вот вот
1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
17.05.2016, 13:04
Цитата Сообщение от Паблито Посмотреть сообщение
пересоздание можно отключать в манифесте
а что про убийство из за ресурсов? не в курсе может ли система не закрыв приложение убить одну из его фоновых активностей7

Добавлено через 2 минуты
Цитата Сообщение от YuraAAA Посмотреть сообщение
забыл кое что
да, теперь гораздо лучше. в моем велосипеде тоже хандлер стартует только когда запускается поток и останавливается если обнаружил что поток отработал или при паузе активити с последующем стартом при возобновлением если статическая переменная хранящая флаг отработки еще не выставлена. а на эвентах чем отличается от обратных вызовов?
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
17.05.2016, 14:45
vxg, статичные переменные это не самый лучший вариант. Слушателей эвентов может быть много.
Цитата Сообщение от vxg Посмотреть сообщение
не в курсе может ли система не закрыв приложение убить одну из его фоновых активностей7
Может, если она не видна. Но если у Вас в приложении много активити, это опять же повод задуматься о неверной архитектуре и о переходах на фрагменты.
1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
17.05.2016, 14:50
Цитата Сообщение от YuraAAA Посмотреть сообщение
статичные переменные это не самый лучший вариант
в описанном велосипеде это самое то
Цитата Сообщение от YuraAAA Посмотреть сообщение
если у Вас в приложении много активити, это опять же повод задуматься о неверной архитектуре и о переходах на фрагменты
я бы даже сказал: если у вас в приложении активити, это повод задуматься тем ли вы заняты)
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
17.05.2016, 14:51
vxg,
Цитата Сообщение от vxg Посмотреть сообщение
если у вас в приложении активити, это повод задуматься тем ли вы заняты)
в смысле?)
0
17.05.2016, 14:53

Не по теме:

Цитата Сообщение от YuraAAA Посмотреть сообщение
в смысле?)
в смысле андроид это конечно хорошо но комбайн в сарае и станок в цеху ржавеют

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

Синхронизация итераций между потоками
Добрый день. Сразу скажу, что облазил все доступные мне офф. доки по Qt и полгугла, но не нашел необходимых мне средств в Qt. Задача...

Синхронизация ресурса между потоками
Всем привет!) Возник вопрос.. незнаю как его решить.. Предположим есть класс A, с числовой переменной a + геттер\сеттер на нее. В...

Lock-free синхронизация: как организуется нотификация между потоками?
Добрый день! Хотелось бы услышать о реальном опыте, потому что теоретических советов в гугле много, но практика - она, как известно,...

Синхронизация метода с двумя потоками
Добрый день, уважаемые! Только начал знакомиться с многопоточностью и пытаюсь синхронизировать метод для корректной работы с двумя...

Взаимодействие между потоками
Привет. Есть класс А, который содержит не статические методы, которые можно вызвать лишь с главного потока. И есть класс Б, который...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты 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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru