当前位置: 代码迷 >> J2SE >> 多线程有关问题-求解
  详细解决方案

多线程有关问题-求解

热度:3931   发布时间:2013-02-25 00:00:00.0
多线程问题-求解
为Thread撰写两个子类,其中一个的run()在启动后取得第二个Thread object reference,然后调用wait()。另一个子类的run()在过了数秒之后调用notifyAll(),唤醒第一个线程,使第一个线程可以印出消息。
这里面的“取得第二个Thread object reference”是什么意思啊,高手能用代码解释下吗

------解决方案--------------------------------------------------------
应该是取得第二个线程对象的引用的意思吧,我也正在学多线程编程。
Java code
public class ThreadTest {        private Thread child = null;    /**     * @param args     */    public static void main(String[] args) {        ThreadTest test = new ThreadTest();        test.work();    }        public void work() {        myThread1 thread1 = new myThread1();        myThread2 thread2 = new myThread2();                //将第二个线程的引用赋值给成员变量child        this.child = thread2;                thread1.start();        thread2.start();    }        class myThread1 extends Thread {                public void run() {            synchronized(child) {                try {                    child.wait();                } catch (InterruptedException e) {                    e.printStackTrace();                }                                System.out.println("我睡醒了,现在开始打印信息");            }        }    }        class myThread2 extends Thread {        public void run() {            synchronized(this) {                try {                    sleep(5 * 1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                                System.out.println("唤醒另一个线程吧");                this.notifyAll();            }        }            }}
------解决方案--------------------------------------------------------
忘记加注释了

Java code
public class ThreadTest {        private Thread child = null;    /**     * @param args     */    public static void main(String[] args) {        ThreadTest test = new ThreadTest();        test.work();    }        public void work() {        myThread1 thread1 = new myThread1();        myThread2 thread2 = new myThread2();                //将第二个线程的引用赋值给成员变量child        this.child = thread2;                thread1.start();        thread2.start();    }        class myThread1 extends Thread {                public void run() {            synchronized(child) {                try {                    //取得第二个Thread object reference,然后调用wait()                    child.wait();                } catch (InterruptedException e) {                    e.printStackTrace();                }                                System.out.println("我睡醒了,现在开始打印信息");            }        }    }        class myThread2 extends Thread {        public void run() {            synchronized(this) {                try {                    sleep(5 * 1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                                System.out.println("唤醒另一个线程吧");                this.notifyAll();            }        }            }}
  相关解决方案