在java祖傳父類Object里面有這么一個方法
public final native void wait(long timeout) throws InterruptedException;
這個方法的作用是讓當前執行緒等待,退出CPU退出監視器
直到Object.notify()、Object.notifyAll() 剛好選中該執行緒 、超時、被中斷
他有一個兄弟方法,水的一匹,直接貼上代碼
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos > 0) {
timeout++;
}
wait(timeout);
}
當我們不點進原始碼時看其引數,心想:jdk有點6的嘛,實作了nanos級別的時間控制
一旦你點進來看到原始碼,就這????
假裝精確nanos級別的時間控制,實則只要第二個引數大于0,milliseconds就加1,辣雞,tui
類似的操作還有
在執行緒祖傳父類Thread里面有這么一個方法
public static native void sleep(long millis) throws InterruptedException;
此方法作用為讓當前執行緒等待,退出CPU,與wait()有一點區別就是,sleep()不會退出監視器
直接看其兄弟方法
public static void sleep(long millis, int nanos) throws InterruptedException {
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
}
sleep(millis);
}
稍微比wait()精確了一丟丟,至少是大于等于500000才加1了,且人家在millis等于0時基本上就加1
Thread里面還有一個方法,不多bb,直接笑
public final synchronized void join(long millis) throws InterruptedException
public final synchronized void join(long millis, int nanos) throws InterruptedException {
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
}
join(millis);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/256777.html
標籤:java
上一篇:java中的io流
下一篇:finally面試常問
