Thead.sleep和thead1.sleep的区别

小编 171

Thead.sleep和thead1.sleep基本上没有什么区别。主要是因为Thread.sleep是一个静态方法,就是所有对象抽象出来共有的方法。根据Java基础语法,把Thread.sleep()换成thread1.sleep()将不会有任何区别,因为编译器发现sleep()是一个静态方法,会直接在类上调用。

1.Thead.sleep和thead1.sleep的区别

Sleep函数主要是用来告诉操作系统“在未来的多少毫秒内我不参与CPU竞争”。在实际工作中,经常会用到Thead.sleep()函数来使线程挂起一段时间。而Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。

Thread.sleep()是一个静态方法,即所有对象抽象出来共有的方法,它在哪个线程中被调用,就会阻塞这个线程。根据Java基础语法可以知道,把Thread.sleep()换成thread1.sleep()将不会有任何区别,因为编译器发现sleep()是一个静态方法,会直接在类上调用。

2.Thread.Sleep(0)和Thread.Sleep(1)的区别

Sleep的意思是告诉操作系统自己要休息 n 毫秒,这段时间就让给另一个就绪的线程吧。当 n=0 的时候,意思是要放弃自己剩下的时间片,但是仍然是就绪状态,其实意思和 Yield 有点类似。但是 Sleep(0) 只允许那些优先级相等或更高的线程使用当前的CPU,其它线程只能等着挨饿了。如果没有合适的线程,那当前线程会重新使用 CPU 时间片。

Thread.Sleep(1)使用 1 作为参数,这会强制当前线程放弃剩下的时间片,并休息 1 毫秒(因为不是实时操作系统,时间无法保证精确,一般可能会滞后几毫秒或一个时间片)。但因此的好处是,所有其它就绪状态的线程都有机会竞争时间片,而不用在乎优先级。

延伸阅读

Thead.sleep和Thread wait有什么区别

sleep和wait都是使线程暂时停止执行的方法,但它们有很大的不同,具体区别如下:

首先,sleep是线程类Thread 的方法,它是使当前线程暂时睡眠,可以放在任何位置;而wait是使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。

其次,Sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是无法访问的。而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。

再者,线程执行wait方法时,需要其他线程调用Monitor.Pulse()或者Monitor.PulseAll()进行唤醒或者说是通知等待的队列。而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部