zoukankan      html  css  js  c++  java
  • Java13新特性 -- 重新实现旧版套接字API

    全新实现的 NioSocketImpl 来替换JDK1.0的PlainSocketImpl。

    • 它便于维护和调试,与 NewI/O (NIO) 使用相同的 JDK 内部结构,因此不需要使用系统本地代码。
    • 它与现有的缓冲区缓存机制集成在一起,这样就不需要为 I/O 使用线程栈。
    • 它使用 java.util.concurrent 锁,而不是 synchronized 同步方法,增强了并发能力。
    • 新的实现是Java 13中的默认实现,但是旧的实现还没有删除,可以通过设置系统属性
      jdk.net.usePlainSocketImpl来切换到旧版本。
    public abstract class SocketImpl implements SocketOptions {
        private static final boolean USE_PLAINSOCKETIMPL = usePlainSocketImpl();
        
        private static boolean usePlainSocketImpl() {
            PrivilegedAction<String> pa = () ->
            NetProperties.get("jdk.net.usePlainSocketImpl");
            String s = AccessController.doPrivileged(pa);
            return (s != null) && !s.equalsIgnoreCase("false");
        }
        /**
        * Creates an instance of platform's SocketImpl
        */
        @SuppressWarnings("unchecked")
        static <S extends SocketImpl & PlatformSocketImpl> S
        createPlatformSocketImpl(boolean server) {
            if (USE_PLAINSOCKETIMPL) {
            	return (S) new PlainSocketImpl(server);
            } else {
            	return (S) new NioSocketImpl(server);
            }
        }
    }
    
    

    SocketImpl的USE_PLAINSOCKETIMPL取决于usePlainSocketImpl方法,而它会从NetProperties读取
    dk.net.usePlainSocketImpl配置,如果不为null且不为false,则usePlainSocketImpl方法返回true;
    createPlatformSocketImpl会根据USE_PLAINSOCKETIMPL来创建PlainSocketImpl或者NioSocketImpl。

  • 相关阅读:
    Shiro【常用的自定义】
    Shiro【重要概念总结】
    Shiro【自定义Realm实战】
    Shiro【内置Realm实操】
    Shiro【快速上手】
    Shiro【初识】
    面向对象【抽象类和接口的区别】
    面向对象【多态中的成员访问特点】
    Kafka2.12-2.5.0在windows环境的安装 启动 通信测试
    CentOS.iso 下载地址收纳整理
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/11845117.html
Copyright © 2011-2022 走看看