Java-Thread类中sleep是为什么是静态方法

发布于 2017-09-27 22:56:53 字数 66 浏览 1950 评论 3

Thread类中sleep是静态方法,表示当前线程休眠。
为什么不设计成非静态的,当实例调用时,该实例休眠。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

归属感 2017-10-18 23:23:35

1、sleep是静态方法,那么在实现Runnable的线程类也能调用。
2、sleep是静态方法,所以sleep时候只是让出了cup却不能释对象锁,因为获取不到对象。
3、线程和实例并不是对等的,不是一个线程是一个实例,是你创建的实例继承了Thread或者Runable,实现了run(),并调用start()的时候能执行多个线程,实例还是一个,线程却是多个。所以实例休眠线程就休眠了这个假设不成立。

想挽留 2017-10-11 02:32:37

new Thread().start();//这种匿名实例情况下,开发人员在编程时并不知道该线程实例的变量名,所以就没法调用该实例的sleep()方法。

从代码层面考虑,Thread的核心是什么?答:run方法。或者这样问,线程是用来干什么的?答:执行代码逻辑的。所以我们应该在代码逻辑中 去sleep当前正在执行此处代码的线程。

瑾兮 2017-10-02 18:23:40

其实很简单. 现在的实现, 是只能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有同样的问题, 死锁.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文