您的位置:首页 > 大数据 > 人工智能

线程中的wait,notify

2015-04-23 17:00 113 查看
在调用wait的时候,线程会释放其占用的对象锁,例子如下:

public class Demo implements Runnable {
    private static final Logger logger = Logger.getLogger(Demo.class);

    public void run() {
        logger.info("我开始运行了");
        synchronized (this) {
            logger.info("我进来了");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }
            logger.info("我要等待");
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            logger.info("我要结束了");
        }
    }

    public static void main(String[] args) throws IOException {

        Demo demo = new Demo();
        
        new Thread(demo).start();
        new Thread(demo).start();
        new Thread(demo).start();

    }
}如果不注释wait(),三个线程都会进入等待状态,且都停留在wait()处:
[Thread-0] 我开始运行了
[Thread-1] 我开始运行了
[Thread-2] 我开始运行了
[Thread-0] 我进来了
[Thread-0] 我要等待
[Thread-2] 我进来了
[Thread-2] 我要等待
[Thread-1] 我进来了
[Thread-1] 我要等待 如果注释wait(),三个线程会按顺序完成整个流程(因为对当前对象加了锁)
[Thread-0] 我开始运行了
[Thread-2] 我开始运行了
[Thread-1] 我开始运行了
[Thread-0] 我进来了
[Thread-0] 我要等待
[Thread-0] 我要结束了
[Thread-1] 我进来了
[Thread-1] 我要等待
[Thread-1] 我要结束了
[Thread-2] 我进来了
[Thread-2] 我要等待
[Thread-2] 我要结束了


其它更详细的介绍见:http://www.360doc.com/content/10/1219/21/573136_79591569.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: