首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: Thread.currentThread().sleep(x)与Thread.sleep(x)

Java: Thread.currentThread().sleep(x)与Thread.sleep(x)
EN

Stack Overflow用户
提问于 2010-01-16 19:45:41
回答 3查看 79.4K关注 0票数 92

我的代码中有这样的代码

代码语言:javascript
复制
Thread.currentThread().sleep(x);

Eclipse告诉我使用静态

代码语言:javascript
复制
Thread.sleep(x); 

相反,为什么呢?有什么区别,这两种方法在功能上有什么区别吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-16 19:48:52

只有一个方法,而不是两个,而且它是静态的。虽然您可以通过实例引用调用静态方法,但这并不是一种好的风格。它表明程序员认为他或她正在调用实例方法。一个困惑的程序员可能认为他或她可以使另一个线程(而不是当前线程)以这种方式休眠,而事实并非如此。

这两行代码做的都是一样的事情,但第二行代码的风格更好。

票数 143
EN

Stack Overflow用户

发布于 2010-01-16 19:49:16

在Java中,睡眠是一种静态方法。您的两个示例都做了完全相同的事情,但前一个版本令人困惑,因为它看起来像是在调用特定对象上的方法,但它根本没有这样做。在您的示例中,这不会有太大影响,但如果您具有以下条件,则会更危险:

代码语言:javascript
复制
someOtherThread.sleep(x);

这一次,看起来您是在告诉其他线程休眠,但实际上您是在让当前线程休眠。避免此类错误的方法是始终使用类而不是特定对象调用静态方法。

票数 33
EN

Stack Overflow用户

发布于 2015-12-03 14:05:01

Thread.currentThread().sleep(x);Eclipse所说的方式,所以如果需要的话,Thread.sleep(x);静态上下文是必需的,所以我们在这个睡眠中保持稍微延迟。

静态范例由一个对象设置,只影响特定对象堆打印生命周期,同样,考虑到整个对象生命周期静态并不是那么麻烦,如果需要,它可以用来简化编码,但要小心完成,因为静态足迹由Class (例如:- Class.forName(pkg.className))引用,类似于名称,而不是任何object,它是HEAP内存中类的运行时单一打印副本。

同样,object的使用也有弱引用、幻影引用和强引用的优缺点...,

代码被大自然所曲解。这只是我们如何做的方式,以使其工作&功能性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2077216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档