您的位置:首页 > 编程语言 > Java开发

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

2016-02-19 15:44 513 查看
一. 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( )通知生产者,可以再放下一批物品。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: