powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация и вызов методов.
17 сообщений из 17, страница 1 из 1
Синхронизация и вызов методов.
    #33752705
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим у класса имеется два синхронизированных метода. f1 и f2 Два объекта этого класса обитают в разных потоках. Можноли одновременно вызвать f1 одного объекта и f2 второго?
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752749
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
если вы говорите о методах класса то их можно будет вызвать только из одного потока, из разных - нет.
если вы говорите о методах экземпляров класса, каждый из которых используется эксклюзивно отдельным потоком то да.
Здесь надо быть внимательным, чтобы избежать dead lock. Он будет возможен, к примеру, если обьект А исползуемый потоком А будет вызывать synchronized метод обьекта В используемый потоком В. В это же время обьект В используемый потоком В будет вызывать synchronized метод обьекта А используемый потоком А.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752793
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоесть синхронизация распространяется только на синхронизированный блок, но не на все синхронизированные блоки класса?
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752829
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
принцип работы synchronized в примитивном описании:

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

Принцип работы synchronized основан на том что все классы и экземпляры классов (для простоты и те и другие далее именуются просто обьекты) имеют lock. Когда какой-либо поток входит в synchronized секцию кода то JRE проверяет свободен ли lock данного обьекта или же он используется в данный момент другим потоком.
Если lock обьекта свободен, то данный поток получает lock и эксклюзивно удерживает его до конца исполнения synchronized кода. Все остальные потоки которые пытаются использовать synchronized код блокируются JRE до тех пор пока lock обьекта не освободится. Когда lock обьекта становится свободен JRE произвольно выберает один из блокированых потоков, передает ему lock обьекта и запускает поток.

Заметьте что в то время как какой-либо поток эксклюзивно владеет lock обьекта и выполняет synchronized код, не synchronized код (в том числе иметоды) обьекта доступны для использования другими потоками.

Это упрощенное описание, смотрите ссылку для более полной инфо:
http://java.sun.com/docs/books/tutorial/essential/threads/index.html
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752844
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. И ещё раз: другой синхронайз-метод будет не доступен?!
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752858
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
авторЕсли lock обьекта свободен, то данный поток получает lock и эксклюзивно удерживает его до конца исполнения synchronized кода. Все остальные потоки которые пытаются использовать synchronized код блокируются JRE до тех пор пока lock обьекта не освободится.
Если вы хотите одновременно вызвать методы обьекта f1 и f2 из одного и того же потока, то - да, если из разных то - нет.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752864
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опа! Вот это самое интересное. А как я из одного потока одновременно 2 метода вызову?
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752865
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрт! Потоки чёт для меня слишком сложная тема.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752870
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
ну хотя бы так:

Код: plaintext
1.
2.
3.
4.
5.
 public   void  run()
{
    MyClass myObject= new  MyClass();
    myObject.synchronizedMethod1();
    myObject.synchronizedMethod2();
}
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752872
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп! Прости что туплю. Но ведь оба метода будут исполнятся в одном вычислительном потоке. Друг за другом.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752880
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
наверно запутанно написано, под одновременным вызовом понимался вызов методов на момент работы потока с обьектом (естественно последовательно), а не вызов двух методов параллельно в один и тот же момент.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752884
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня интересует именно одновременный в самом настоящем смысле вызов. Тоесть чтоб два метода одновременно существовали в виде вычислительных потоков и могли друг друга вытеснять.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33752890
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
Не зная решаемой задачи ответ дать нельзя. Да, для паралельных вычислений можно использовать потоки, можно процессы, а можно и то и другое. Может быть нужна синхронизация, может нужна частичная синхронизация, а может быть синхронизация не нужна совсем.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33753050
SarinДопустим у класса имеется два синхронизированных метода. f1 и f2 Два объекта этого класса обитают в разных потоках. Можноли одновременно вызвать f1 одного объекта и f2 второго?
Попробую упростить ситуацию, а то дискуссия заходить в тупик:) Да, можно.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33753256
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, я от потоков свихнусь.

Синхронайз использует неявный объект блокировки. Он на весь объект один. Значит вызвав любой синхронайз мы по идеи должны на время его работы заблокировать все синхронайзы объекта.
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33753941
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
этим занимается JRE
...
Рейтинг: 0 / 0
Синхронизация и вызов методов.
    #33764378
Власов Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinПростите, я от потоков свихнусь.

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

На объект он один, но объектов то два!

соответственно если метод НЕ static, то используется монитор (так по-нормальному называется внутренний объект блокировки) экземпляра объекта. Один монитор может быть одновременно только у одного потока. Однако в случае двух разных объектов они друг другу не мешают.

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


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