全新实现的 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。

最新文章

  1. 事务BEGIN TRANSACTION
  2. Java基础,输入输出
  3. Nancy Scripts,CSS文件夹配置
  4. Delphi中Messagedlg用法
  5. windows端加密程序,lua代码,ZeroBrane调试
  6. log4j按级别输出日志文件
  7. 新增WiFi真机同步与实时预览功能 简化真机调试步骤
  8. http://www.linuxso.com/linuxpeixun/10332.html
  9. AI教程
  10. A. Round House
  11. Servlet中路径信息总结
  12. Vray
  13. springboot缓存注解——@Cacheable
  14. 三.js实例
  15. Spring Security(八):2.4.3 Project Modules
  16. Python全栈开发之路 【第十七篇】:jQuery的位置属性、事件及案例
  17. Nginx 网络事件
  18. 2017.5.11 MapReduce运行机制
  19. SQL判断如果一列值为null则取另一列值代替 isnull()
  20. 服务器上u盘装机centos7.2

热门文章

  1. JanusGraph安装graphexp
  2. CentOS6.7安装部署之Tomcat多实例
  3. JAVA线程池的创建与使用
  4. python生成测试报告HTMLTestRunner时报错ValueError: write to closed file的解决办法
  5. BSGS学习笔记
  6. matplotlib--基本setting
  7. 201671010442 葸铃 实验十四 团队项目评审&amp;课程学习总结
  8. 火鸡堂 对 基于云的胜利冲锋队 为了交项目干杯 的 Beta 产品测试报告
  9. Elasticsearch 索引文档如何使用自动生成 Id?
  10. linux中/dev/null与2&gt;&amp;1讲解