当前位置: 代码网 > it编程>编程语言>C# > C#中Sleep() 和 Wait()的区别小结

C#中Sleep() 和 Wait()的区别小结

2024年05月28日 C# 我要评论
sleep() 和 wait() 是两个不同的方法,用于控制线程的执行。sleep() 方法:是线程类 thread 的静态方法,它使当前线程暂停执行一段时间。sleep() 方法接受一个参数,表示线

sleep() 和 wait()  是两个不同的方法,用于控制线程的执行。

sleep() 方法:

是线程类 thread 的静态方法,它使当前线程暂停执行一段时间。

sleep() 方法接受一个参数,表示线程暂停的时间长度,单位是毫秒。

在暂停期间,线程不会释放锁资源。当暂停时间结束后,线程会重新进入就绪状态,等待 cpu 调度执行。

sleep()  方法可以用于模拟一段时间的延迟操作。

wait() 方法:

是 object 类的实例方法,它使当前线程进入等待状态,直到其他线程调用相同对象的 notify() 或 notifyall() 方法唤醒它。

wait() 方法必须在同步代码块或同步方法中调用,并且会释放锁资源。当线程被唤醒后,它会重新竞争锁资源,并继续执行。

wait() 方法通常与notify() 或 notifyall() 方法配合使用,用于实现线程间的协作。(notify:通知)

参考代码:

using system;
using system.collections.generic;
using system.text;
using system.threading;
namespace consoleapplication1
{
   
    class program
    {
        static readonly object _locker = new object();
 
        static bool _go;
        static void main(string[] args)
        {
            new thread(work).start(); //新线程会被阻塞,因为_go == false
            console.readline(); //等待用户输入
            lock (_locker)
            {
                _go = true; //改变阻塞条件
                monitor.pulse(_locker); //通知等待的队列。
            }
            thread.sleep(1000);
        }
 
        static void work()
        {
            lock (_locker)
            {
                while (!_go) //只要_go字段是false,就等待。
                    monitor.wait(_locker); //在等待的时候,锁已经被释放了。
            }
            console.writeline("被唤醒了");
        }
        
    }
}

区别:

  • sleep() 是 thread 线程类的方法,而 wait() 是 object 类的方法。
  • seep() 会暂停当前线程的执行一段时间,而 wait() 会使当前线程进入等待状态。
  • sleep() 不会释放锁资源,而 wait() 会释放锁资源。
  • sleep() 不需要被其他线程唤醒,而 wait() 需要被其他线程调用相同对象的 notify() 或 notifyall() 方法唤醒。

需要注意的是,sleep() 和 wait() 方法都可能抛出 interruptedexception 异常,需要进行异常处理。 

到此这篇关于c#中sleep() 和 wait()的区别小结的文章就介绍到这了,更多相关c# sleep() wait()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com