提议语为什么不是交替出现
而且i am in store最开始出现了两次

解决方案 »

  1.   

    class Mailbox {
        public boolean request;
        public String message;
        public static int i = 1;    public synchronized void store(String mess) {
            while (request==true) {
                try {
                    System.out.println("i am waiting in store");
                    wait();
                } catch (InterruptedException e) {}
            }
            message=mess;
            request=true;
            notify();
        }    public synchronized String retrieve() {
            while (request==false) {
                try { 
                    System.out.println("i am waiting in retrieve");
                    notify();
                    wait();
                } catch (InterruptedException e) {}
            }
            request=false;
            return message;
        }
    }class MyThread extends Thread {
        Mailbox box;
        MyThread(Mailbox box){this.box=box;}
        public void run() {
            int i;
    //      while(true) {
                for (i=0;i<10;i++)
                    box.store("OK"+i);
    //      }
        }
    }class MyThread1 extends Thread {
        Mailbox box1;
        MyThread1(Mailbox box1){this.box1=box1;}    public void run() {
            while(true) {
                System.out.println(box1.retrieve());
            }
        }
    }
    class Test {
        public static void main(String[] args) {
            Mailbox myMailbox=new Mailbox();
            myMailbox.request = false;        new MyThread(myMailbox).start();
            new MyThread1(myMailbox).start();
    }
      

  2.   

    //Test类 少了一个 } class Test {
        public static void main(String[] args) {
            Mailbox myMailbox=new Mailbox();
            myMailbox.request = false;        new MyThread(myMailbox).start();
            new MyThread1(myMailbox).start();
        }
    }
      

  3.   

    你的线程同步代码有问题. 讲起来太多了. 你分析一下执行流程就知道了.
    最好在一些关键地方 println 些消息, 方便你观看执行流程.存邮件线程, 应该是存完后通知取邮件线程
    取邮件线程是当没有邮件时再通知存邮件线程.这是同步逻辑的关键地方