首页 > 编程语言 > 详细

多线程的无限等待机制

时间:2020-06-20 17:16:00      阅读:76      评论:0      收藏:0      [点我收藏+]
/*
多线程的无限等待机制: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();

}
}

多线程的无限等待机制

原文:https://www.cnblogs.com/wxgShareBlog/p/13169115.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!