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。

  • 相关阅读:
    C/C++字符串转换函数;
    MFC CTreeCtrl 递归遍历算法
    汉字转拼音
    Windows之权限讲解
    Ubuntu 保存文件时报E212
    ON_WM_MOUSEWHEEL无响应
    sln、db、opendb、vcxproj、filters、user文件跟踪说明
    iOS 9: UIStackView入门
    Swift语言Storyboard教程:第一部分
    springboot启动项目报错:ERROR:o.s.b.d.LoggingFailureAnalysisReporter解决办法
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/11845117.html
Copyright © 2011-2022 走看看