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


Answers

在Java中,睡眠是一种静态方法。 你的两个例子都是一样的,但是前一个版本很混乱,因为它看起来像是在一个特定的对象上调用一个方法,但是根本没有这样做。 在你的例子中,这并不重要,但是如果你有以下几点,则会更危险:

someOtherThread.sleep(x);

这次看起来你正在告诉别的线程睡觉,但实际上你正在把当前的线程休眠。 避免犯这种错误的方法是总是使用类来调用静态方法,而不是使用特定的对象。

Question

我在我的代码中有这个

Thread.currentThread().sleep(x);

Eclipse告诉我使用静态的

Thread.sleep(x); 

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




Thread.currentThread().sleep(x); 或者Eclipse的说法Thread.sleep(x); 如果需要,静态上下文是必需的,所以我们坚持稍微延迟这个睡眠。

由一个对象设置的静态范式只影响特定的对象堆生命周期,再次考虑整个对象生命周期静态不是那么麻烦,如果需要的话,它可以用来简化编码,打印被按Class引用(例如: - Class.forName(pkg.className) ),而不是由HEAP内存中的运行时单个打印副本的object执行。

对象的再次使用也有弱,幻影,强类型的参考....的优点和缺点,

代码是自然卷入的。 这只是我们如何做才能使其工作和功能。