Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / синхронизация потоков / 8 сообщений из 8, страница 1 из 1
11.04.2016, 08:44
    #39212156
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
Если первый поток сначала зайдет в метод log-v2, то он получает блокировку на весь объект и пока этот поток выаолняется, второй поток не сможет войти в log-v1.

Что будет, если первый поток сначала зайдет в метод log-v1, это же блокирует только метод? Тогда второй поток сможет войти в log-v2?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class SampleClass {

    private Logger log;
  
    public synchronized void log-v1(String msg01, String msg02){
       log.writeln(msg01);
       log.writeln(msg02);
    }

  
    public void log-v2(String msg01, String msg02){
       synchronized(this){
          log.writeln(msg01);
          log.writeln(msg02);
       }
    }

  }
...
Рейтинг: 0 / 0
11.04.2016, 09:03
    #39212172
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
rema174,

Есть подозрение, что на уровне байт-кода блокировка в этих методах ничем не отличается.
...
Рейтинг: 0 / 0
11.04.2016, 10:18
    #39212261
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
Blazkowicz,

на самом деле, там где я выдернул этот код было так и написано, что возможен только один поток при таком раскладе, просто хотелось разобраться. я так понимаю, что синхронизация метода болкирует все ресурсы внутри метода и это не даст второму потоку войти в log-v2

есть подозление, что на форуме примерно один из 30 сечёт в чем дело
...
Рейтинг: 0 / 0
11.04.2016, 10:58
    #39212305
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
rema174на самом деле, там где я выдернул этот код было так и написано, что возможен только один поток при таком раскладе, просто хотелось разобраться. я так понимаю, что синхронизация метода болкирует все ресурсы внутри метода и это не даст второму потоку войти в log-v2
А какая разница второму потоку где стоят? Перед/во время вызова или уже внутри метода?

Плюс существует оптимизатор в компиляторе. Он вполне данный код может сделать 100% одинаковым с точки зрения байт кода.
...
Рейтинг: 0 / 0
11.04.2016, 12:46
    #39212466
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
rema174это же блокирует только метод?
Нет jvn в обоих случаях блокирует монитор.
Монитором для не статического метода является сам экземпляр.
...
Рейтинг: 0 / 0
11.04.2016, 12:48
    #39212468
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
Blazkowiczrema174,

Есть подозрение, что на уровне байт-кода блокировка в этих методах ничем не отличается.Отличается, если верить этой статье
...
Рейтинг: 0 / 0
11.04.2016, 13:05
    #39212480
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
UsmanBlazkowiczrema174,

Есть подозрение, что на уровне байт-кода блокировка в этих методах ничем не отличается.Отличается, если верить этой статье

А не надо верить всему что на хабре пишут. Пару лет назад много баянов порвали по этой теме. Отличается вывод байткода а в рантайме все будет одинаково, от monitorenter\monitorexit никуда не уйдешь. Просто в первом случае компилятор добавляет их в метаинформацию, а во втором случае прямо в байткоде. В любом случае при выполнении там будет мемори барьер. К сожалению это было давно и пруф мне лень искать
...
Рейтинг: 0 / 0
11.04.2016, 13:11
    #39212486
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синхронизация потоков
забыл никUsmanпропущено...
Отличается, если верить этой статье

А не надо верить всему что на хабре пишут. Пару лет назад много баянов порвали по этой теме. Отличается вывод байткода а в рантайме все будет одинаково, от monitorenter\monitorexit никуда не уйдешь. Просто в первом случае компилятор добавляет их в метаинформацию, а во втором случае прямо в байткоде. В любом случае при выполнении там будет мемори барьер. К сожалению это было давно и пруф мне лень искать

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


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