sleep
public static void sleep(long time) 当前线程 休眠time毫秒后 醒来继续执行
栗子
public static void main(String[] args) throws InterruptedException {
//throws InterruptedException 抛出异常
for (int i = 0; i < 5; i++) {
Thread.sleep(100); //.sleep(要休眠的毫秒数) 写这个报异常 alt enter
System.out.println(i);
}
}
wait
void wait() 其他线程调用此对象的方法前,使当前线程等待。
void wait(long time) 在time时间内 若有唤醒则唤醒 否则时间到后 自己醒来
栗子
public static void main(String[] args) throws InterruptedException {
Object j = new Object();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (j) {
System.out.println("开始等待");
try {
j.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
Thread.sleep(5000);
//唤醒正在等待的线程
synchronized (j) {
System.javaout.println("开始唤醒");
j.notify();
}
}
wait和sleep区别
sleep是Thread类的静态方法
休眠到时间后自动醒来执行 在同步内和同步外都可以使用
注意 sleep方法 在同步中使用 不会释放锁
wait是Object类的方法
必须由锁对象调用 也就是必须在同步内使用 线程遇到wait方法会释放锁对象 可以是其他线程 使用notfiy唤醒 也可以使用重载方法 时间到后自己醒