powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Понимание synchronized
10 сообщений из 10, страница 1 из 1
Понимание synchronized
    #38166100
mre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mre
Гость
Привет, вроде почитал много о синхронизации, но так до конца и не понял.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public boolean assault(User target)
{
    synchronized (target)
    {
        if (target.battle > 0)
        {
            Battle tmpBattle = battles.get(target.battle);
            //операции с tmpBattle
        }
        else
        {
             //здесь код, который начинает бой и задается target.battle
        }
    }
}



Могут ли быть изменены свойства tmpBattle внутри synchronized другими потоками или весь код в блоке synchronized будет выполняться последовательно потоками.
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166142
Фотография VladislavVV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mre, если метод синхронизирован - то к нему имеет доступ только 1 поток
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166155
mre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mre
Гость
Если синхронизируется весь код внутри блока, то для чего указывать объект блокировки?
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166253
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mreЕсли синхронизируется весь код внутри блока, то для чего указывать объект блокировки?
"объект блокировки" это "монитор". Для одного и того же монитора, блок будет выполняться только одним потоком. Если мониторы разные, то возможно паралельное исполнени для каждого монитора. Зачастую удобнее использовать Lock, а не synchronized.
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166372
mre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mre
Гость
Ага, понятно, монитор - это конкретный экземпляр, а для статических методов монитор будет конкретным классом?
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166377
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче - ответ - внутри представленного блока все будет ок, все будет последовательно. Правило простое - один монитор - один поток.
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166392
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторАга, понятно, монитор - это конкретный экземпляр, а для статических методов монитор будет конкретным классом?
Ну точнее объектом типа "класс" - работать будет если используется один класслоэдер, если, вдруг, разные то и объекты получаться разные.
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166398
mre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mre
Гость
Все, я понял, всем спасибо!
...
Рейтинг: 0 / 0
Понимание synchronized
    #38166454
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mreПривет, вроде почитал много о синхронизации, но так до конца и не понял.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public boolean assault(User target)
{
    synchronized (target)
    {
        if (target.battle > 0)
        {
            Battle tmpBattle = battles.get(target.battle);
            //операции с tmpBattle
        }
        else
        {
             //здесь код, который начинает бой и задается target.battle
        }
    }
}



Могут ли быть изменены свойства tmpBattle внутри synchronized другими потоками или весь код в блоке synchronized будет выполняться последовательно потоками.

public synchronized boolean assault(User target) {
//синхронайзд метода равносилен synchronized (this) - и всего - то. Удобне, конечно, использовать посторонний объект, нежели this.
}
...
Рейтинг: 0 / 0
Понимание synchronized
    #38167069
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mreМогут ли быть изменены свойства tmpBattle внутри synchronized другими потоками или весь код в блоке synchronized будет выполняться последовательно потоками.
Да, если найдутся два таргета, у которых поля батл равны.

Я бы синхронизировал метод(ы) класса Батл. (который выполнял бы те самые "//операции с tmpBattle").
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Понимание synchronized
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]