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。

  • 相关阅读:
    maven POM.xml 标签详解
    Spring Boot Starter 的基本封装
    谷歌浏览器屏蔽广告的插件
    关于mysql中触发器old和new
    centos7 安装zookeeper3.4.8集群
    Flink架构、原理与部署测试
    图解Spark API
    汇编器构造
    Oracle11g CentOS7安装记录
    如何创造一门编程语言?
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/11845117.html
Copyright © 2011-2022 走看看