java socket read 方法堵塞的解决思路

最近在学socket的网络编程,但遇到了一点问题,就是每次循环从缓冲区读数据时,如果缓冲区没有数据,这时候read方***堵塞,此时也没有办法输入了。后来发现了主要有两种解决方法:

  1. 在消息开头标记消息长度
  2. 新启动一个线程进行读操作,阻塞就阻塞吧,反正读写没在一个线程(也算某种意义的读写分离)

这是最初会阻塞的代码 在这里插入图片描述 后来就用了读写分离,启动了新的线程来读 在这里插入图片描述

class read implements Runnable{

    BufferedReader bufferedReader;

    read(BufferedReader bufferedReader){
        this.bufferedReader = bufferedReader;
    }

    @SneakyThrows
    @Override
    public void run() {
        String info;
        while((info = bufferedReader.readLine())!=null){
            System.out.println(info);
        }
    }
}

就解决了堵塞

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:45
你不要过来啊啊啊啊啊啊啊
码农索隆:对面:“今天你不面也得面”
点赞 评论 收藏
分享
07-05 16:23
门头沟学院 Java
mengnankk:我投了300,约了5 6个面试。感觉项目写的太多了。一个项目就写五六个亮点,不是把整个项目的功能描述下。其他的没啥,简历看起来有点长
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
07-07 14:30
复旦大学 Java
遇到这种人我也不知道说啥了
无能的丈夫:但我觉得这个hr语气没什么问题啊(没有恶意
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务