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。

  • 相关阅读:
    怎么看到数据库以前做过的日志?
    感觉很好的网站
    uview 滑动切换
    Flyweight享元(结构型模式)
    悟空,真的是空?
    Interpreter解释器(行为型模式)
    Proxy代理(结构型模式)
    [转]有一种爱叫索取
    Command命令(行为型模式)
    Composite组合(结构型模式)
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/11845117.html
Copyright © 2011-2022 走看看