美文网首页
java线程的wait方法和notify方法的运用

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

作者: 阿拉要洗澡 | 来源:发表于2017-08-22 17:20 被阅读0次

    一.JavaThread类的几个函数的说明:

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

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

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

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

    二.  例子:

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

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

    代码:

    importJava.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();

    }

    }

    }

    }

    }

    相关文章

      网友评论

          本文标题:java线程的wait方法和notify方法的运用

          本文链接:https://www.haomeiwen.com/subject/enbldxtx.html