>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19743 个阅读者 刷新本主题
 * 贴子主题:  BIO模型的缺陷 回复文章 点赞(0)  收藏  
作者:javathinker    发表时间:2021-06-24 11:23:00     消息  查看  搜索  好友  复制  引用

    
  Bio是阻塞式IO,当我们没有获取到数据的时候,整个应用程序会实现阻塞等待,不能实现做其他的事情。

BIO的特性:线程阻塞

  当我们在调用io函数的时候,如果没有获取的数据的情况下,就会一直阻塞、整个阻塞的过程中 不可以去做其他的事情。
// 1.创建一个ServerSocket连接
final ServerSocket serverSocket = new ServerSocket();
// 2.绑定端口号
serverSocket.bind(new InetSocketAddress(9090));
// 3.当前线程放弃cpu资源等待获取数据
System.out.println("等待获取数据...");
/** 如果没有请求到来,accept方法会一直阻塞*/
Socket socket = serverSocket.accept();
System.out.println("获取到数据...");
// 4.读取数据
int read = socket.getInputStream().read(bytes);
String result = new String(bytes);
System.out.println(result);

使用多线程实现伪异步io的缺点

  • a、不能支持并发;
  • b、使用多线程读取socket的数据能加快速度,但多线程的创建也会非常消耗CPU资源
  • c、存在线程安全问题
while (true) {
    final Socket socket = serverSocket.accept();
    executorService.execute(new Runnable() {
        @Override
        public void run() {
            try {
                System.out.println("获取到数据...");
                // 4.读取数据
                int read = socket.getInputStream().read(bytes);
                String result = new String(bytes);
                System.out.println(result);
            } catch (Exception e) {

            }
        }
    });
}

  ----------------------------
原文链接:https://www.jianshu.com/p/a1103eefd1b4

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2021-08-30 20:28:57 重新编辑]
  Java面向对象编程-->Swing组件(下)
  JavaWeb开发-->Web运作原理(Ⅳ)
  JSP与Hibernate开发-->Spring、JPA与Hibernate的整合
  Java网络编程-->RMI框架
  精通Spring-->创建综合购物网站应用
  Vue3开发-->计算属性和数据监听
  利用堆栈将中缀表达式转换成后缀表达式
  Java小白们的练手大餐:100道编程题面试题精讲(最新推出)
  JDK14的新特性
  被迫重构代码,这次我干掉了 if-else
  内部类的编程练习题
  最实用的10个重构小技巧排行榜,你都用过哪些?
  Java关键字final、static使用总结
  使用javaNIO实现C/S模式的通信
  Java设计模式:观察者模式
  Java入门实用代码:获取本机IP地址及主机名
  Java入门实用代码:链表元素查找
  Java入门实用代码:自定义异常
  Java入门实用代码:查找字符串最后一次出现的位置
  史上最全正则表达式合集(马上收藏)
  JAVA设计模式之备忘录模式原理与用法详解
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。