在Thread.sleep(millis,nanos)实现中,我使用了我的Android Codebase,该函数的定义有点像这样
public static void sleep(long millis, int nanos) throws InterruptedException {
long start = System.nanoTime();
long duration = (millis * NANOS_PER_MILLI) + nanos;
Object lock = currentThread().lock;
synchronized (lock) {
while (true) {
///implementation
}
}
}
currentThread()
返回调用者线程,lock
是Thread
类中的对象(new Object())。
这里假设一个线程当前正在执行,我再次从第二个线程调用sleep()
,然后不会更改变量start
和duration
,它们仍在使用第一个线程?整个函数不应该synchronized
来阻止这种情况吗?
选择lock
作为同步对象有何意义?无论如何,Thread
的单个实例无法同时多次调用sleep()
?