Topic: 请教线程间通信的问题

  Print this page

1.请教线程间通信的问题 Copy to clipboard
Posted by: Butterfly_125
Posted on: 2005-07-18 15:57

今天看了一下线程间通信的问题。有点不太清楚怎么用:
    /*
    *关于生产者和消费者问题
    */
    class Q
    {
      private String name = "袁平";
      private String sex = "男";
      boolean bFull = false;
      public synchronized void put(String name,String sex)
      {
        if(bFull)
          wait();
        this.name = name;
        try
        {
          Thread.sleep(10);
        }
        catch(Exception e)
        {
          System.out.println(e.getMessage());
        }
        this.sex = sex;
        bFull = true;
        notify();  //这个notify()应该唤醒get()中的wait()吧?
      }
      public synchronized void get()
      {
        if(!bFull)
        wait();
        System.out.println(name + "----->" + sex);
        bFull = false;
        notify();  //这个notify()应该唤醒put()中的wait()吧?
      }
    }

    class Producer implements Runnable  //生产者
    {
      Q q = null;
      public Producer(Q q)
      {
        this.q = q;
      }
      public void run()
      {
        int i = 0;
        while(true)
        {
          if(i==0)
          q.put("袁平","男");
          else
          q.put("王燕","女");
          i=(i+1)%2;
        }
      }
    }

    class Consumer implements Runnable  //消费者
    {
      Q q = null;
      public Consumer(Q q)
      {
        this.q = q;
      }
      public void run()
      {
        while(true)
        {
          q.get();
        }
      }
    }

    public class ThreadCommunation
    {
      public static void main(String [] args)
      {
        Q q = new Q();
        new Thread(new Producer(q)).start();
        new Thread(new Consumer(q)).start();
      }
    }
    其中,notify()是不是要标明要唤醒哪个方法中的wait()?wait() and notify()我还不太会用,能不
    能通过这个例子给我讲一下?谢谢大家!

2.Re:请教线程间通信的问题 [Re: Butterfly_125] Copy to clipboard
Posted by: dqgh0
Posted on: 2005-08-10 11:27

notify 是唤醒在等待序列中的第一个等待的线种,在这个程序里也就就是唤醒另一个线程,因为这里面就两个线程
没有notify(),wait( )就一直等下去

3.Re:请教线程间通信的问题 [Re: dqgh0] Copy to clipboard
Posted by: ranchgirl
Posted on: 2005-08-10 12:55

dqgh0 wrote:
notify 是唤醒在等待序列中的第一个等待的线种


第一个等待的线程??? JLS did not say so!!!

http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.8

4.Re:请教线程间通信的问题 [Re: Butterfly_125] Copy to clipboard
Posted by: simbas
Posted on: 2005-08-13 21:33

notify 随机唤醒在等待序列中的一个线程


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923