Docker学习:外部浏览器访问容器

您所在的位置:网站首页 如何访问linux Docker学习:外部浏览器访问容器

Docker学习:外部浏览器访问容器

2024-01-13 21:50| 来源: 网络整理| 查看: 265

Oracle21C:Windows版本的安装、卸载、环境变量配置、避坑指南|ORA-12514|为什么安装目录没有bin目录

渣渣梦: 感谢,有用

JAVA多线程:狂抓 join()方法到底会不会释放锁,给你彻底介绍清楚(三)

Ahshsjshbb: 我说的简单点就是,先不管外面的代码块什么锁 一旦有线程调用成功t.join 说明它就拿到了t对象锁(join是用synchronized修饰的),而这段代码会 While(isalive()){this.wait} 先判断t指向的线程THREAD是否存活,如果不存活说明线程结束,就不会执行this.wait 直接进入下一步了,这样就不释放t对象锁,但是如果只是t.join这一步拿的t锁外面不是t锁,相当于执行完t锁代码块自动释放t锁 如果t指向的线程thread存活,就会t.wait释放t对象锁并进入等待状态,等待有别的线程出现 t.notify或者notifyAll 然后,还会继续进入while循环判断t指向的thread是否存活,直到没有存活,才会彻底结束join方法 而这一步为了保证成功,所有的线程最后都会自动调用this.notifyAll 就是为了配合join方法,所以t指向的线程一定会自动调用notifyAll并结束的

JAVA多线程:狂抓 join()方法到底会不会释放锁,给你彻底介绍清楚(三)

Ahshsjshbb: 你没明白我说的话,而且源码就是this.wait释放的,这样跟你说吧,这个帖子的意思表达的不清楚,用的例子不恰当罢了, 首先主线程不管synchronized里拿到的是Object还是thread的某个子线程对象 一旦用某个thread对象.join,这一步就是拿锁了,因为join方法就是用synchronized修饰的,也就是说这一步就是为了自动拿锁, 在方法的最后, While(is.alive()){ This.wait(); } 注意,源代码这里的意思是,调用该join方法的线程对象假设为thread t1,这个线程对象是否存活,如果存活,那就t1.wait释放t1对象锁 为什么要这样做呢?那是因为其实所有的线程在结束时都会自动调用this.notifyAll,就是为了唤醒所有拿到相同对象的,使用了wait()而进入等待的线程 所以你说的new一个对象,只要拿到一样的锁,主线程需要用同样的对象t.join,一定会释放t对象锁,直到t对象代表的线程结束 因为哪怕提前notifyAll,它还是会判断isAlive

JAVA多线程:狂抓 join()方法到底会不会释放锁,给你彻底介绍清楚(三)

weixin_48167509: 主线程看起来像是释放了锁,是因为第二段代码里他是用子线程本身加的锁,其实并没有释放,不信你new一个普通线程作为锁对象试试,还是会死锁

linux答疑(一):RHEL8要挂载分区后为什么ls /dev/sd* 看不到新增的磁盘和分区

小黄的前端: 问题解决了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3