|
|
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Допустим у класса имеется два синхронизированных метода. f1 и f2 Два объекта этого класса обитают в разных потоках. Можноли одновременно вызвать f1 одного объекта и f2 второго? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 20:35 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
если вы говорите о методах класса то их можно будет вызвать только из одного потока, из разных - нет. если вы говорите о методах экземпляров класса, каждый из которых используется эксклюзивно отдельным потоком то да. Здесь надо быть внимательным, чтобы избежать dead lock. Он будет возможен, к примеру, если обьект А исползуемый потоком А будет вызывать synchronized метод обьекта В используемый потоком В. В это же время обьект В используемый потоком В будет вызывать synchronized метод обьекта А используемый потоком А. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 21:05 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Тоесть синхронизация распространяется только на синхронизированный блок, но не на все синхронизированные блоки класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 21:41 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
принцип работы 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 22:30 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Спасибо. И ещё раз: другой синхронайз-метод будет не доступен?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 22:54 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
авторЕсли lock обьекта свободен, то данный поток получает lock и эксклюзивно удерживает его до конца исполнения synchronized кода. Все остальные потоки которые пытаются использовать synchronized код блокируются JRE до тех пор пока lock обьекта не освободится. Если вы хотите одновременно вызвать методы обьекта f1 и f2 из одного и того же потока, то - да, если из разных то - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:29 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Опа! Вот это самое интересное. А как я из одного потока одновременно 2 метода вызову? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:40 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Чёрт! Потоки чёт для меня слишком сложная тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:41 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
ну хотя бы так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:45 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Стоп! Прости что туплю. Но ведь оба метода будут исполнятся в одном вычислительном потоке. Друг за другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:47 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
наверно запутанно написано, под одновременным вызовом понимался вызов методов на момент работы потока с обьектом (естественно последовательно), а не вызов двух методов параллельно в один и тот же момент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 23:57 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Меня интересует именно одновременный в самом настоящем смысле вызов. Тоесть чтоб два метода одновременно существовали в виде вычислительных потоков и могли друг друга вытеснять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 00:07 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Не зная решаемой задачи ответ дать нельзя. Да, для паралельных вычислений можно использовать потоки, можно процессы, а можно и то и другое. Может быть нужна синхронизация, может нужна частичная синхронизация, а может быть синхронизация не нужна совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 00:18 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
SarinДопустим у класса имеется два синхронизированных метода. f1 и f2 Два объекта этого класса обитают в разных потоках. Можноли одновременно вызвать f1 одного объекта и f2 второго? Попробую упростить ситуацию, а то дискуссия заходить в тупик:) Да, можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 08:19 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
Простите, я от потоков свихнусь. Синхронайз использует неявный объект блокировки. Он на весь объект один. Значит вызвав любой синхронайз мы по идеи должны на время его работы заблокировать все синхронайзы объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 09:58 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
этим занимается JRE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 12:52 |
|
||
|
Синхронизация и вызов методов.
|
|||
|---|---|---|---|
|
#18+
SarinПростите, я от потоков свихнусь. Синхронайз использует неявный объект блокировки. Он на весь объект один. Значит вызвав любой синхронайз мы по идеи должны на время его работы заблокировать все синхронайзы объекта. На объект он один, но объектов то два! соответственно если метод НЕ static, то используется монитор (так по-нормальному называется внутренний объект блокировки) экземпляра объекта. Один монитор может быть одновременно только у одного потока. Однако в случае двух разных объектов они друг другу не мешают. если же метод static, то используется монитор класс объекта. А вот он уже один на все объекты данного класса (об извращениях с ClassLoader умолчим). Поэтому в случае двух,трех и т.п. экземплярах, только один поток сможет зайти в процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 18:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33752793&tid=2149078]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 502ms |

| 0 / 0 |
