多线程的无限等待机制

/*
多线程的无限等待机制:wait()方法进入无线等待
notify()解除等待
使用匿名内部类创建多线程
两种方式:
第一种Thread子类:
MyThread my = new MyThread();
my.start();
改用匿名内部类
Thread t = new Thread(){
@Override
public void run() {
..
}
};
t.start();
第二种方式实现Runnable接口
Runnable的实现类 Runnable的实现类对象 = new Runnable的实现类();
Thread t = new Thread(Runnable的实现类对象);
t.start();

Thread t = new Thread(Runnable的实现类对象){
@Override
public void run() {
..
}
};
t.start();
* */
public class DemoWaitThread {
public static void main(String[] args) {
Object obj = new Object();
/*
这里创建了两个线程
因为两个线程都会运行,但是第二个程序运行的时候 碰到了Thread.sleep(),进入了休眠状态
所以我们看到运行时会先出现第一个线程中的显示语句
客户要这些东西:可乐,冰棍
老板知道了这些东西去拿了,等待老板去拿
但是第一个线程遇到obj.wait();,进入了无线等待状态
当Thread.sleep时间到了,第二个线程休眠结束,继续代码
老板取回来了,提醒客户
继续代码遇到obj.notify(); 唤醒无线等待的obj
第一个线程继续运行
客户付款走人
------------------------------------------
* */
new Thread(new Runnable() {
@Override
public void run() {
while (true){
synchronized (obj) {
System.out.println("客户要这些东西:可乐,冰棍");
System.out.println("老板知道了这些东西去拿了,等待老板去拿");
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("客户付款走人");
System.out.println("------------------------------------------");
}
}
}
}).start();

new Thread(new Runnable() {
@Override
public void run() {
while (true){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj) {
System.out.println("老板取回来了,提醒客户");
//唤醒
obj.notify();
}
}
}
}).start();

}
}

猜你喜欢

转载自www.cnblogs.com/wxgShareBlog/p/13169115.html