我已经从 java 转向 C#,并且对 wait() 和 sleep() 感到困惑。 在java中, sleep 不会删除对象的锁,并且在 sleep 完成后线程重新开始工作,并且在等待的情况下,它确实会删除对象的锁并允许其他线程访问该对象一段时间。
这在 C# 中也是如此还是有什么区别?
最佳答案
是的,在 C# 中也是如此。大多数情况下,Java 中的 Thread.sleep
、Object.wait
、Object.notify
、Object.notifyAll
与 .NET 中的 Thread.Sleep
、Monitor.Wait
、Monitor.Pulse
、Monitor.PulseAll
密切对应。
我预计公平性等细节上会存在一些差异,但基本原理是相同的。
但是,您应该很少在现代代码中使用这些低级抽象,无论是在 Java 还是 C# 中 - 在 Java 中,在 java.util.concurrent
和 .NET 中使用更高级别的抽象如果可以的话(并且如果您使用的是 .NET 4),请尝试使用 Task
抽象。特别是,使用 Task
将使您为 C# 5(和 WinRT)中的异步盛宴做好准备。
关于c# - 从 Java 到 C#,线程结构的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845192/