Здравствуйте, aefimov, Вы писали:
A>Здравствуйте,
А>>1) Привильно ли я понимаю, что следующие два куска кода эквивалентны?
A>Нет. Синхронизация метода блокирует метод, синхронизация this блокирует инстанс объекта.
Ого! Вот это настоящие принципиальные отличия....
A>Нет. Синхронизация происходит по средствам семафоров, в качестве которых выступают объекты JVM. Cинхронизация по this — это синхронизация по инстансу объекта класса. Именно эту синхронизацию не рекомендуется использовать, так как это блокирует доступ к объекту целиком (в синхронизированных участках кода этого объекта будет всего один тред, причем, если участков много, то это приведет к тому, что все треды будут ждать пока какойнидуть один не выйдет из какого нибудь одного блока).
Я использую синхронизацию по классу, чтобы организовать очередь обращений клоггеру — потоки получают временой штамп, строку и объект, пишеут в StringBuffer-ы, результат своей работы подают "на конвейер" в синхронный метод, который:
[ul]
[li]Пишет строку в файл.[/li]
[li]Пишет её в консоль[/li]
[li]Отправляет её в графический логгер (swing-компонент).[/li]
[/ul]
Если бы писать в файл например не каждый раз а 1-2 раза в секунду — это ускорит работу но об "ошибке перед крахом" инфа будет утерена...
A>Спасибо!... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]