SystemClock.sleep和Thread.sleep原始碼分析
阿新 • • 發佈:2019-01-11
一、在android中休眠3s鐘有2中方法:
1、SystemClock.sleep(3000);
2、Thread.sleep(3000);
二、通過系統原始碼區別
1、SystemClock.sleep(long ms)原始碼:
[java] view plain copy print?- publicstaticvoid sleep(long ms)
- {
- long start = uptimeMillis();
- long duration = ms;
-
boolean interrupted = false;
- do {
- try {
- <span style="color:#ff0000;"> Thread.sleep(duration);</span>
- }
- catch (InterruptedException e) {
- interrupted = true;
- }
- duration = start + ms - uptimeMillis();
-
} while (duration >
- if (interrupted) {
- // Important: we don't want to quietly eat an interrupt() event,
- // so we make sure to re-interrupt the thread so that the next
- // call to Thread.sleep() or Object.wait() will be interrupted.
-
Thread.currentThread().interrupt();
- }
- }
- Thread.sleep(long time)原始碼:
- publicstaticvoid sleep(long time) throws InterruptedException {
- Thread.sleep(time, 0);
- }
- publicstaticvoid sleep(long millis, int nanos) throws InterruptedException {
- VMThread.sleep(millis, nanos);
- }
- 最終呼叫到</span>VMThread類原始碼,再呼叫到底層
- <pre name="code"class="java"> staticnativevoid sleep (long msec, int nsec) throws InterruptedException;
3、所以在android開發者建議使用Thread.sleep(long time)方法