Java中的两种延时的方法及使用场景
public static void delay(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
以上方法通过调用 Thread.sleep() 阻塞线程,仅捕获 InterruptedException,无主动取消逻辑。
若在UI线程中使用此方法,会导致主界面卡死、无响应等情况。适用于非UI线程的简单休眠(如后台任务)。
public static void delayUI(final long millis) {
try {
ModalContext.run(new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException,
InterruptedException {
/** 需要在非UI线程中执行的代码 */
delay(millis);
ModalContext.checkCanceled(monitor);
}
}, true, new NullProgressMonitor(), Display.getCurrent());
} catch (InvocationTargetException e) {
} catch (InterruptedException e) {
}
}
以上方法通过 ModalContext.run() 将延时任务提交到非UI线程执行。因此不会阻塞UI线程,界面保持响应。试用于需要与UI交互的耗时操作(如进度条更新),保证UI流畅。