好久不见,甚是想念,我是你们的好朋友祝英台炸油条。最近因为实习和毕业的事情忙的焦头烂额,没有去更新博文真的非常不好意思,这不咱今天就来了
更一个我遇到最新鲜的bug。如果没有去仔细玩io的朋友可能永远都遇不到!我敢保证🕶
今天在做远端调用框架阻塞启动的时候,客户端和服务端我分别获取了一个通道的输入流和输出流 然后启动后出问题了直接死锁动弹不得,我尝试去寻找原因,并修改,作为一个改bug专业户,当然“修改成功”,我就是把输入流和输出流的创建顺序和他们的使用顺序保持,一致就成功了?
可我不死心啊,继续查找原因,找到了个博客说的也倒是生动,我便按照他的方法追起了源码 (8条消息) ObjectInputStream与ObjectOutputStream的顺序问题_到中流遏飞舟的博客-优快云博客
不多说直接追源码
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4cKNmdMf-1667113940608)(/upload/2022/04/image-0239095c0b0b496da6729d3b33dc885e.png)]](https://i-blog.csdnimg.cn/blog_migrate/eb06120fa6dad24af2ec99ea91f8d956.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4cj1ygka-1667113940610)(/upload/2022/04/image-9958f4a006364c0697eb37535b7d2ded.png)]](https://i-blog.csdnimg.cn/blog_migrate/3754a4564e0f9de5d4410ed4d2f286d0.png)
去看了下官方的解释
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IV7v2TnT-1667113940612)(/upload/2022/04/image-137c4ae9416e49449f8b4bdefc276a3d.png)]](https://i-blog.csdnimg.cn/blog_migrate/d6152f77b8cb72b5b9c1d86401541b4b.png)
第一段的意思是,创建一个从指定的InputStream读取的ObjectInputStream,序列化的流的头是从这个Stream中读取并验证的。此构造方法会一直阻塞直到相应的ObjectOutputStream已经写入并刷新头。
所以上述代码执行后会都阻塞,如果将创建ObjectInputStream的顺序修改成其他的顺序,便可正常通信。
博主分享了在做远端调用框架阻塞启动时遇到的死锁问题。客户端和服务端分别获取通道输入流和输出流后出现死锁,将输入流和输出流的创建顺序与使用顺序保持一致可解决。追源码发现,按读写顺序设置流的读写顺序能保证正常通信。
646

被折叠的 条评论
为什么被折叠?



