并发编程复习(四):wait和notify解析
发布日期:2021-11-13 10:21:43
浏览次数:10
分类:技术文章
本文共 1601 字,大约阅读时间需要 5 分钟。
首先本篇文章要说的是:wait方法会释放当前锁对象,但是notify不会释放锁,可能你并未理解什么意思,上代码:
public class MyThread6 { private volatile List list = new ArrayList<>(); public void add() { list.add("主席"); } public int getSize() { return list.size(); } public static void main(String[] args) { MyThread6 myThread6 = new MyThread6(); Object obj = new Object(); Thread thread = new Thread(new Runnable() { @Override public void run() { synchronized (obj) { for(int i=0;i<10;i++){ myThread6.add(); System.out.println("线程" + Thread.currentThread().getName() + "添加了一个元素"); try { Thread.sleep(1000); if (myThread6.getSize() == 5) { System.out.println("发出通知"); obj.notifyAll(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } },"t1"); Thread thread2 = new Thread(new Runnable() { @Override public void run() { synchronized (obj) { if(myThread6.getSize()!=5){ try { obj.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("收到通知"); throw new RuntimeException(); } } }); thread2.start(); thread.start(); }}输出结果:
线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素发出通知线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素线程t1添加了一个元素收到通知Exception in thread "Thread-0" java.lang.RuntimeException at cn.lh.bf.MyThread6$2.run(MyThread6.java:61) at java.lang.Thread.run(Thread.java:745)可以看见,虽然发送通知了(notify方法运行),但是当前锁并未释放,而是只要线程t1运行结束释放锁之后线程2才收到通知,抛出异常。
转载地址:https://blog.csdn.net/Lee_Ho_/article/details/78043552 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月16日 16时28分46秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Ubuntu安装Nginx
2019-04-27
Ubuntu 下安装thttpd Web服务器
2019-04-27
用thttpd做Web Server
2019-04-27
服务器端开发经验总结 Linux C语言
2019-04-27
将网站程序放在tmpfs下
2019-04-27
使用Nginx的proxy_cache缓存功能取代Squid
2019-04-27
nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
2019-04-27
nginx 的proxy_cache才是王道
2019-04-27
Nginx proxy_cache 使用示例
2019-04-27
Nginx源代码分析 - 日志处理
2019-04-27
使Apache实现gzip压缩
2019-04-27
Memcached在大型网站中应用
2019-04-27
Hadoop简要介绍
2019-04-27
squid中的X-Cache和X-Cache-Lookup的意义
2019-04-27
squid 优化指南
2019-04-27
编程方式刷新Squid缓存服务器的五种方法
2019-04-27
centos vnc配置笔记
2019-04-27
Linux服务器网络开发模型
2019-04-27
nginx虚拟目录设置 alias 和 root
2019-04-27
理解http响应头中的Date和Age
2019-04-27