我已经从 java 迁移到 C#,并且对 wait() 和 sleep() 感到困惑。在 java 中,sleep 不会移除对对象的锁定,并且在 sleep 完成后线程重新开始工作,并且在等待的情况下,它会从对象中移除锁定并允许其他线程访问该对象一段时间。
在 C# 中也是如此还是有什么不同?
是的,在 C# 中也是如此。在大多数情况下,Thread.sleep
Java中的,Object.wait
, Object.notify
,与 .NET 中的 , , ,Object.notifyAll
密切对应。Thread.Sleep
Monitor.Wait
Monitor.Pulse
Monitor.PulseAll
我希望在公平性等细节上有一些差异,但基本原理是一样的。
但是,您应该很少在现代代码中使用这些低级抽象,无论是在 Java 还是 C# 中 - 在 Java 中java.util.concurrent
,在 .NET 中使用更高级别的抽象,Task
如果可以(并且如果您在.NET 4)。特别是,使用Task
将使您为 C# 5(和 WinRT)中的异步盛宴做好准备。