Java-Thread类中sleep是为什么是静态方法
Thread类中sleep是静态方法,表示当前线程休眠。
为什么不设计成非静态的,当实例调用时,该实例休眠。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Thread类中sleep是静态方法,表示当前线程休眠。
为什么不设计成非静态的,当实例调用时,该实例休眠。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
1、sleep是静态方法,那么在实现Runnable的线程类也能调用。
2、sleep是静态方法,所以sleep时候只是让出了cup却不能释对象锁,因为获取不到对象。
3、线程和实例并不是对等的,不是一个线程是一个实例,是你创建的实例继承了Thread或者Runable,实现了run(),并调用start()的时候能执行多个线程,实例还是一个,线程却是多个。所以实例休眠线程就休眠了这个假设不成立。
new Thread().start();//这种匿名实例情况下,开发人员在编程时并不知道该线程实例的变量名,所以就没法调用该实例的sleep()方法。
从代码层面考虑,Thread的核心是什么?答:run方法。或者这样问,线程是用来干什么的?答:执行代码逻辑的。所以我们应该在代码逻辑中 去sleep当前正在执行此处代码的线程。
其实很简单. 现在的实现, 是只能sleep当前的线程.当前线程是自愿的.
让sleep()成为实例方法, 当前线程可以直接sleep别的线程, 会引入很多 多线程问题.
很直接的例子就在Thread类里, 大家看Java api:
http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
destroy(), suspend(), stop(),resume()这些实例方法都已经被deprecated了.
活下来的是哪些? static方法(只对当前线程操作); 还有一些比较温和的实例方法, 如getXXX(), isXXX(), join(), yield()等.
这里解释了destroy(), suspend(), stop(),resume()为什么deprecated
http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html
如果sleep不是静态的, 只对当前进程作用. 而是实例方法, 那么应该和suspend有同样的问题, 死锁.