在某些情况下,我们大多数人都会这样写:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
; // do nothing
}
是否正确或错误,仅在某些测试工具中可接受,不是我的观点。 我的观点是,同样的代码可以写得更简洁,如下:
LockSupport.parkNanos(2000* 1000000);
有什么理由让我偏爱一种方法而不是另一种方法。
最佳答案
可读性:Thread.sleep
有一个非常直观的含义。您将如何描述(向其他开发人员)您对 LockSupport.parkNanos
的使用?如果该描述主要包含“我希望当前 线程 sleep ”,那么 Thread.sleep
肯定更具描述性。
简洁性来自于缺少中断处理——所以如果你愿意,可以创建一个包装器方法来执行此操作,它将异常作为 RuntimeException
传播。哎呀,如果你正在创建一个包装方法,你可以使用任何一种实现,尽管另一个线程当然可以unpark你的“ sleep ”线程,就像它可以中断它一样......
关于Java:LockSupport.parkNanos 与 Thread.sleep(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397881/