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()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论