线程的sleep()
和wait()
public class ThreadWaitAndSleep {
/**
* @author blue
* @date 2020年8月9日
*wait线程进入等待后必须通过notify或者notifyAll唤醒
*sleep()在规定时间结束后会自动唤醒
*Sleep()方法是一个静态方法只对当前对象有效Sleep()无法释放锁
*/
public static void main(String[] args) {
Object locked =new Object();
Thread waitThread =new Thread(new WaitUseLocked(locked));
Thread sleepThread=new Thread(new SleepUseLocked(locked));
waitThread.start();
sleepThread.start();
}
}
//一个有wait()的线程
class WaitUseLocked implements Runnable{
private Object locked;
public WaitUseLocked(Object locked) {
super();
this.locked = locked;
}
@Override
public void run() {
// TODO 自动生成的方法存根
synchronized(locked) {
System.out.println("等待线程");
try {
locked.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("等待完毕");
}
}
}
//一个有sleep()的线程
class SleepUseLocked implements Runnable{
private Object locked;
public SleepUseLocked(Object locked) {
super();
this.locked = locked;
}
@Override
public void run() {
// TODO 自动生成的方法存根
synchronized (locked) {
System.out.println("睡觉线程zzzzz");
//通知等待线程
locked.notify();//让进入等待的线程唤醒
}
try {
Thread.sleep(3000);//睡三秒
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("睡醒了");
}
}