首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

多线程有关问题-求解

2012-11-01 
多线程问题-求解为Thread撰写两个子类,其中一个的run()在启动后取得第二个Thread object reference,然后调

多线程问题-求解
为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();            }        }            }} 

热点排行