热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NIO相关基础模型

1.NIO阻塞模型1.1代码publicstaticvoidmain(String[]args){intport8080;ServerSocketserverSocketnull;

NIO-相关基础模型

1. NIO阻塞模型

1.1 代码

public static void main(String[] args) {
        int port = 8080;

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(port);
        } catch (IOException e) {
            e.printStackTrace();
        }

        while (true){
            try {
                Socket accept = serverSocket.accept();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        InputStream inputStream = null;
                        try {
                            inputStream = accept.getInputStream();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        byte[] bytes = new byte[1024];
                        try {
                            int len;
                            while ((len = inputStream.read(bytes)) != -1){
                                System.out.println(new String(bytes,0,len));
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

1.2 缺点

1) accpet阻塞
2) read阻塞,这也是为什么只能每连接每线程
3) 大量请求会创建大量线程,导致程序崩溃

1.3 这里发现一个有意思的问题,理论上accpet和read应该是线程阻塞的,但是我通过jconsole查看后发现,线程是runnable状态,所以以后不能通过线程状态来判断线程是否真的runnable。

引用:
1. Java线程和操作系统线程的关系
2. 面试官:都说阻塞 I/O 模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?

2. NIO伪异步模型

2.1 代码

唯一的区别是,将 new Thread(xxx).start();换成了 Execute.execute(new TimerTask(socket));

2.2 区别

相比较第一种模型,唯一的好处在于线程池可以限制线程的数量,不会无限的创建线程从而使服务彻底瘫痪。但是大量的请求意味着无数的请求会在放在队列,这会导致服务对外不可用。

3. NIO


推荐阅读
author-avatar
幸福天使之宝贝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有