在某些情况下,我们大多数人都是这样写的:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
; // do nothing
}对还是错,只有在某些测试工具中才能接受,这不是我的观点。我的观点是,可以更简洁地编写相同的代码,如下所示:
LockSupport.parkNanos(2000* 1000000);有什么理由让我偏爱一种方法而不是另一种。
发布于 2012-05-01 21:00:26
方法parkNanos的文档提供了该方法可以返回的条件。所以基本上可以使用它,如果你不介意虚假的唤醒和一些其他线程“释放”等待线程的考虑。
发布于 2012-05-01 20:59:00
如果这个描述主要是“我想要当前的睡眠线程 to ”,那么Thread.sleep无疑更具描述性。
简洁性来自于缺少中断处理-因此,如果需要,可以创建一个包装器方法来执行此操作,该方法将异常作为RuntimeException进行传播。见鬼,如果你正在创建一个包装器方法,你可以使用任何一种实现,尽管另一个线程当然可以以同样的方式释放你的“睡眠”线程,因为它可以中断它……
发布于 2012-05-01 20:57:43
LockSupport的应用范围要有限得多,并且不支持异常处理。如果你只需要锁定一个线程,这是可以的。
在API中:
这些方法被设计为用作创建更高级别的同步实用程序的工具,它们本身对大多数并发控制应用程序都没有用处。
https://stackoverflow.com/questions/10397881
复制相似问题