0

我已经从 java 迁移到 C#,并且对 wait() 和 sleep() 感到困惑。在 java 中,sleep 不会移除对对象的锁定,并且在 sleep 完成后线程重新开始工作,并且在等待的情况下,它会从对象中移除锁定并允许其他线程访问该对象一段时间。

在 C# 中也是如此还是有什么不同?

4

1 回答 1

5

是的,在 C# 中也是如此。在大多数情况下,Thread.sleepJava中的,Object.wait​​ , Object.notify,与 .NET 中的 ,​​ , ,Object.notifyAll密切对应。Thread.SleepMonitor.WaitMonitor.PulseMonitor.PulseAll

我希望在公平性等细节上有一些差异,但基本原理是一样的。

但是,您应该很少在现代代码中使用这些低级抽象,无论是在 Java 还是 C# 中 - 在 Java 中java.util.concurrent,在 .NET 中使用更高级别的抽象,Task如果可以(并且如果您在.NET 4)。特别是,使用Task将使您为 C# 5(和 WinRT)中的异步盛宴做好准备。

于 2012-06-01T06:06:40.823 回答