Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
目前在java中使用thread.yield()是否是一种良好的做法?_Java_Multithreading_Sleep_Yield_Thread Sleep - Fatal编程技术网

目前在java中使用thread.yield()是否是一种良好的做法?

目前在java中使用thread.yield()是否是一种良好的做法?,java,multithreading,sleep,yield,thread-sleep,Java,Multithreading,Sleep,Yield,Thread Sleep,我在读《有效java》(但第二版)一书,书中说“线程优先级是java平台最不可移植的特性之一”。在博客中,有些人更喜欢sleep()而不是yield(),或者说yield()永远不用。但这是一个古老的信息,甚至那些肯定都是有效的吗?答案是: 使用这种方法很少合适。它可能对调试或测试有用,因为它可能有助于重现由于竞争条件而产生的bug。在设计并发控制结构(如java.util.concurrent.locks包中的结构)时,它可能也很有用 是的,这不太可能改变,因为Java线程依赖于底层操作系统线

我在读《有效java》(但第二版)一书,书中说“线程优先级是java平台最不可移植的特性之一”。在博客中,有些人更喜欢sleep()而不是yield(),或者说yield()永远不用。但这是一个古老的信息,甚至那些肯定都是有效的吗?

答案是:

使用这种方法很少合适。它可能对调试或测试有用,因为它可能有助于重现由于竞争条件而产生的bug。在设计并发控制结构(如java.util.concurrent.locks包中的结构)时,它可能也很有用


是的,这不太可能改变,因为Java线程依赖于底层操作系统线程。这从来都不是好的实践
yield()
自从引入Windows 95以来,在操作系统或Java中没有做任何有用的事情,除了可能在短期的“绿色线程”版本中。@EJP那么,您是否使用sleep()代替yield()?使用它们做什么?当我想睡觉时,我会使用
sleep()
,但我从来不想这样做。如果你问的是
Thread.sleep(0)
,那是毫无意义的。操作系统完全可以在没有您帮助的情况下调度线程。您想用
yield()
解决的问题是什么?根据对原始问题的许多评论,如文档所示,您应该询问为什么要让步,并且在几乎所有情况下都有更好的选择。sleep(0),或者当您没有实际的睡眠理由时的任何实际值,都是非常糟糕的。对于大多数情况,使用Thread.setPriority()可能已经足够好了。对于多核,线程繁忙是可以的。