Когда виртуальная машина встречает заявление sleep(long)
, она прерывает текущий поток. «Текущий поток» в этот момент всегда является потоком, который вызвал Thread.sleep()
. Тогда это говорит:
Эй! Ничего не поделать в этой теме (потому что я должен ждать). Я собираюсь продолжить другую тему.
Смена темы называется "уступить". (Примечание: вы можете сдаться самостоятельно, позвонив по номеру Thread.yield();
)
Итак, ему не нужно выяснять, что такое текущий поток. Всегда вызывается Thread, который вызывает sleep ().
Примечание: Вы можете получить текущий поток, позвонив Thread.currentThread();
Краткий пример:
// here it is 0 millis
blahblah(); // do some stuff
// here it is 2 millis
new Thread(new MyRunnable()).start(); // We start an other thread
// here it is 2 millis
Thread.sleep(1000);
// here it is 1002 millis
MyRunnable
его run()
метод:
// here it is 2 millis; because we got started at 2 millis
blahblah2(); // Do some other stuff
// here it is 25 millis;
Thread.sleep(300); // after calling this line the two threads are sleeping...
// here it is 325 millis;
... // some stuff
// here it is 328 millis;
return; // we are done;