Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для waip
7 / 7 / 1
Регистрация: 27.05.2011
Сообщений: 297

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

19.07.2014, 19:34. Показов 1559. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!) Возник вопрос.. незнаю как его решить..

Предположим есть класс A, с числовой переменной a + геттер\сеттер на нее.

В двух потоках я вызываю класс А обращаюсь к сеттеру и передаю ему параметр, который состоит из значения которое возвращает геттер плюс некоторое рандомное число.. вот так. set_a(A.get_a+RANDOM_KEY);

При этом что я получаю...
Предположим, что переменная а класса А равна 10. Оба потока вызывают геттеры и запоминают значение 10. Один из потоков засыпает. А второй вызывает сеттер(и передает значение которое получит от геттера + какое то число, допустим, 5). В итоге значение переменной а класса А равно 15.

Далее просыпается тот поток, который уснул. Он помнит о той 10ке, которую получил из геттера и плюсует к ней, допустим 2. По итогу значение переменной а класса А меняется с 15 на 12.

А хотелось бы чтобы первый поток выполнил сначала гет и сразу сет, а потом уже второй гет и сет. В таком случае значение переменной было бы: 10+5 = 15 <--поток 1 15+2=17<--- поток 2, а не 10 + 5 = 15 --поток1 10+2=12--поток 2.

Мои предположения... Установить на геттер и сеттер класса А параметр синхронайзед. Но в таком случае я заблокирую весь класс и если есть еще потоки которые юзают другие методы этого класса то они встанут в очередь, что не есть хорошо.. Поэтому я создаю какой-то левый объект и в геттере и сеттере делаю блок синхронайзед с завязкой на левый объект.. ЧТо это дает? Наверно ничего, а почему? Потому что первый поток входит в гет и выходит получая 10 и засыпает после этого. Второй поток входит в гет получает 10 и бросает ее на сет..
Вобщем.. В последнем предложении я слегка напутал хронологию, но суть думаю понятна. Нету реальной синхронизации. Как ее обеспечить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2014, 19:34
Ответы с готовыми решениями:

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

Как происходит переключение между потоками исполнения
Разбирал тестовый пример с семафорами в Java. Работа семафоров понятна. Решил попробовать запустить тот же код, закомментировав семафоры....

Синхронизация между потоками
Вот, например у меня есть основной Ui поток и поток Thread который он породил. И Tread меняет какую то переменную (ну или массив целый) и я...

3
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
19.07.2014, 20:38
Либо у вас статические методы, либо у вас некорректная терминология.

А как вы по другому хотите решить вопрос? Если у вас 2 потока, то при современном железе вряд ли вы испытаете проблему очереди. Поток вошел в монитор - другие потоки не смогут использовать синхронизированные методы ассоциированные с данным монитором. Поток закончил работу - вышел, монитор свободен.

Если потоки должны поочередно выполнять операции - используйте межпотоковые коммуникации.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
20.07.2014, 02:35
waip, Проще всего создать метод, который будет иметь модификатор synchonized и который будет делать то что вам нужно: вызывать set_a(A.get_a+RANDOM_KEY);
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
20.07.2014, 03:29
Ну или использовать параллельные утилиты из пакета java.util.concurrent.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2014, 03:29
Помогаю со студенческими работами здесь

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

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

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

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

Уведомления между потоками
Здравствуйте! Набросал код для экспериментов: #include &quot;stdafx.h&quot; int блок_1(HWND *hWnd, MyStruct* strukt_1); int сервис_1(HWND...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
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