java线程的wait方法和notify方法的运用

一. java Thread类的几个函数的说明:

 1.  setPriority( ): 设置线程的优先权;

    2 . yield( ): 暂停线程的执行,给其它具有相同优先权的线程执行的机会,若此时没有其它线程执行,则此线程继续执行。这个函数并不会释放锁住的对象。

 3.  join( ): 等待加入的线程执行完毕才会执行下一个线程。加入的线程通过interrupt( )来唤醒。

 4.  wait( ): 类似sleep( ), 不同的是,wait( )会先释放锁住的对象,然后再执行等待的动作。注意,这个函数属于Object类。另外,由于wait( )所等待的对象必须先锁住,因此,它只能用在同步化程序段或者同步化方法内,否则,会抛出异常IllegalMonitorStateException.


二.  例子:

  下面,仅对于wait( ) 和notify( )函数进行测试。

  这个例子向读者展示了生产者--消费者关系。

代码:

import java.util.Vector;


public class ThreadWaitNotifyTest {
public static void main(String args[]) {
Vector obj = new Vector();
Thread consumer = new Thread(new Consumer(obj));
Thread producter = new Thread(new Producter(obj));
consumer.start();
producter.start();
}
}
/*消费者 */
class Consumer implements Runnable {
private Vector obj;
public Consumer(Vector v) {
this.obj = v;
}
public void run() {
synchronized(obj) {
while (true) {
try {
if (obj.size() ==0){
obj.wait();
}
System.out.println("Consumer:goods have been taken");
System.out.println("obj size: " + obj.size());
obj.clear();
obj.notify();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
}
/*  生产者 */
class Producter implements Runnable {
private Vector obj;
public Producter(Vector v) {
this.obj = v;
}
public void run() {
synchronized(obj) {
while (true) {
try {
if (obj.size() !=0){
obj.wait();
}

obj.add(new String("apples"));
obj.notify();
System.out.println("Producter:obj are ready");
Thread.sleep(500);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
}


三.  测试结果:

--------------------Configuration: <Default>--------------------
Producter:obj are ready
Consumer:goods have been taken
obj size: 1
Producter:obj are ready
Consumer:goods have been taken
obj size: 1
Producter:obj are ready
Consumer:goods have been taken
obj size: 1
Producter:obj are ready
Consumer:goods have been taken
obj size: 1
Producter:obj are ready
Consumer:goods have been taken


Process interrupted by user.

四.  说明:

1. 生产者--消费者,二者共享数据goods(vector对象),这里,生产者是Producter, 消费者是Consumer。生产者负责放物品到goods中,消费者使用wait( )等待生产者的通知。当得到通知后,消费者取出物品,并且用notify( )通知生产者,可以再放下一批物品。


  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值