Java的“同步”和C#的“锁定”之间有什么区别吗?
这两个关键字是否具有完全相同的效果,或者我应该注意哪些?
根据这个站点: http : //en.csharp-online.net/CSharp_FAQ : _What_is_the_difference_between_CSharp_lock_and_Java_synchronized ,C# lock
和Java synchronized
代码块“语义相同”,而对于方法,Java使用synchronized
同时C#使用属性: [MethodImpl(MethodImplOptions.Synchronized)]
。
Keeg发布的链接中没有涉及到一个有趣的区别:据我所知,在Java的Monitor.Enter和Monitor.Exit中没有用于Java的等效方法调用,C# lock
语句归结为。 这意味着你不能做相当于Monitor.TryEnter的工作 – 当然java.util.concurrent.locks包(从1.5开始)有各种各样的锁具有更多的function。
我java你不必担心锁定你拥有的公共类型。
在.NET中,你必须这样做
更新:这适用于您拥有的类型。 锁定你不拥有的公共类型在任何语言中都是糟糕的:)