У этих двух ключевых слов есть точно такой же эффект, или есть что-то, о чем я должен знать?
Существуют ли различия между Java "synchronized" и С# "lock"?
Ответ 1
В соответствии с этим сайтом: http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_CSharp_lock_and_Java_synchronized, С# lock
и Java synchronized
кодовые блоки "семантически идентичны", тогда как для методов Java использует synchronized
, а С# использует атрибут: [MethodImpl(MethodImplOptions.Synchronized)]
.
Ответ 2
Одно интересное отличие, не описанное в ссылке, опубликованной Keeg: насколько мне известно, нет никаких вызовов эквивалентных методов в Java для .NET Monitor.Enter и Monitor.Exit, с чем сводится инструкция С# lock
. Это означает, что вы не можете выполнить эквивалент Monitor.TryEnter - хотя, конечно, пакет java.util.concurrent.locks(с момента 1.5) имеет множество замков, которые имеют больше доступных функций.
Ответ 3
В java вам не нужно беспокоиться о блокировке публичных типов, которые у вас есть.
В .NET вы должны
Обновлено: это для типов, которыми вы владеете. Блокирование общедоступных типов, которые вы не владеете, плохо на любом языке:)