wait和notify的使用

wait 是使得线程无限等待,notify是让线程运行,继续执行wait之后的代码

他们的使用的前提都是要使用锁对象,这样可以保证只有一个线程运行

代码

public class test1 {
	public static void main(String[] args) {
		Object obj=new Object();
		new Thread() {
			public void run() {
				synchronized(obj){
					System.out.println("告知老板需要那种包子和数量");
					try {
						obj.wait();
					}catch(InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start();
		new Thread() {
			public void run() {
				synchronized(obj) {
					try {
						Thread.sleep(5000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("告知顾客已经做好包子了");
					obj.notify();
				}
			}
		}.start();
	}

}

运行结果:

 

 

第二行运行结果是在5秒后才出现的,这样就可以很好的表示这两个的作用。记住他们的使用通常是结合了锁对象来使用

2、wait的第二种使用方式:

该方法跟sleep方法一样,但是现在wait方法里面带参数的已经被抛弃了

我们可以使用sleep来让线程休眠。

sleep(5000)是代表着让线程休眠5秒

3、notifyAll()是唤醒所有该锁对象

package people;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class test1 {
	public static void main(String[] args) {
		Object obj=new Object();
		while(true) {
		new Thread() {
			public void run() {
				synchronized(obj){
					System.out.println("顾客1:告知老板需要那种包子和数量");
					try {
						obj.wait();
					}catch(InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start();
		new Thread() {
			public void run() {
				synchronized(obj){
					System.out.println("顾客2:告知老板需要那种包子和数量");
					try {
						obj.wait();
					}catch(InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start();
		new Thread() {
			public void run() {
				synchronized(obj) {
					try {
						Thread.sleep(5000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("告知顾客已经做好包子了");
					obj.notifyAll();
				}
			}
		}.start();
		}
	}

}

的线程,让线程继续执行。

区别notify:notify 是唤醒单个线程的,唤醒是同一个锁对象的,但是如果有多个的话,就会随机唤醒一个执行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值