为了同步/排队访问共享资源,我将使用Semaphore,并借助等待循环。
为了不遇到 CPU 挂钩,我想在那个循环中sleep()
稍微深入一点。while
我搜索了http://developer.android.com参考,发现了两个这样的 sleep() 函数,我很困惑哪一个适合哪种场景:
哪一个更适合我描述的情况,为什么?
为了同步/排队访问共享资源,我将使用Semaphore,并借助等待循环。
为了不遇到 CPU 挂钩,我想在那个循环中sleep()
稍微深入一点。while
我搜索了http://developer.android.com参考,发现了两个这样的 sleep() 函数,我很困惑哪一个适合哪种场景:
哪一个更适合我描述的情况,为什么?
首先,你真的需要等待循环吗?您通常可以使用适当的通知解决您的问题,即拥有一个对象,调用wait()
它notify()
或其他方式(如阻塞队列,或Semaphore.acquire()
在您的情况下)。
也就是说,如果你真的想要一个轮询循环(除非你必须这样做,否则你真的不应该这样做),我会坚持使用Thread.sleep()
. 正如文档所说,没有太大区别,只是您可以选择中断Thread.sleep()
. 不要让自己摆脱这样做的选择。
请注意,如果是Thread.sleep()
,您将不得不捕获该异常 - 如果您非常懒惰,您可能会坚持使用SystemClock.sleep()
.
事实是:
Thread.sleep(n) 可以通过使用 asyncTask.cancel(true) 在 AsyncTask 之类的调用中被中断
SystemClock.sleep(n) 似乎忽略了任何中断的命令,因此当您像这里一样使用它时可能存在内存泄漏的风险:https ://github.com/square/leakcanary/blob/master/leakcanary-sample/ src/main/java/com/example/leakcanary/MainActivity.java