多线程编程入门(4):wait,notify方法使用注意事项

来源:互联网 发布:ios编写软件 编辑:程序博客网 时间:2024/06/08 14:28

1 问题

2 代码

public class WaitAndNotify1 {        public static void main(String[] args) {                Thread t1=new Thread(new Runnable(){                        @Override            public void run(){                                System.out.println("Thread-1");                                try {                    synchronized (this) {                        wait();                        System.out.println("Thread-1 after wait");                    }                                    } catch (InterruptedException e) {                    e.printStackTrace();                }            }        });        Thread t2=new Thread(new Runnable(){                        @Override            public void run(){                try {                    Thread.sleep(4000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                System.out.println("Thread-2");                synchronized (this) {                    notify();                    System.out.println("Thread-2 after notify");                }            }        });        t1.start();        t2.start();    }}

3 解答

http://stackoverflow.com/questions/37672929/why-do-wait-and-notify-function-not-working-properly-on-same-class-lock

4 后记

当调用wait方法时出现异常时(IllegalMonitorStateException),这时请注意查看官方api说明文档,而不是立马baidu或者google.应该仔细理解每句话的含义加以实践证明.

5 修改之后的代码

图中1,2,3,4处应该为同一个对象,即同一把锁.


0 0
原创粉丝点击