sleep与wait的比较
1.sleep是Thread类 的方法 wait是Object类的方法
2.sleep只让出cpu但是不释放锁资源。wait表示让出cpu并且释放锁资源,只有当其他线程调用了notify方法时,原线程才会重新竞争锁资源,但不会立即等到锁,因为此时锁还在别人手上,必须等到调用notify方法的线程释放锁原线程才会继续执行
代码
public class ThreadTest {
private static Object obj=new Object();
//定义一个锁
public static void main(String [] args){
//线程1
new Thread1().start();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 线程2
new Thread2().start();
}
private static class Thread1 extends Thread{
@Override
public void run() {
synchronized (obj){
System.out.println("进入 线程1");
System.out.println("线程1 调用wait方法");
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1 继续执行");
System.out.println("线程1 执行完了");
}
}
}
private static class Thread2 extends Thread{
@Override
public void run() {
synchronized (obj){
System.out.println("进入线程2 ");
System.out.println("线程2调用notify唤醒其他线程");
obj.notify();
try {
Thread.sleep(10);
//这里thread2休息了10毫秒,但是thread1仍然不会执行,因为此时锁还在thread2手上
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程2继续执行");
System.out.println("线程2执行完了");
}
}
}
}