Java13新特性 -- 重新实现旧版套接字API
2024-09-02 10:59:19
全新实现的 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。
最新文章
- 事务BEGIN TRANSACTION
- Java基础,输入输出
- Nancy Scripts,CSS文件夹配置
- Delphi中Messagedlg用法
- windows端加密程序,lua代码,ZeroBrane调试
- log4j按级别输出日志文件
- 新增WiFi真机同步与实时预览功能 简化真机调试步骤
- http://www.linuxso.com/linuxpeixun/10332.html
- AI教程
- A. Round House
- Servlet中路径信息总结
- Vray
- springboot缓存注解——@Cacheable
- 三.js实例
- Spring Security(八):2.4.3 Project Modules
- Python全栈开发之路 【第十七篇】:jQuery的位置属性、事件及案例
- Nginx 网络事件
- 2017.5.11 MapReduce运行机制
- SQL判断如果一列值为null则取另一列值代替 isnull()
- 服务器上u盘装机centos7.2
热门文章
- JanusGraph安装graphexp
- CentOS6.7安装部署之Tomcat多实例
- JAVA线程池的创建与使用
- python生成测试报告HTMLTestRunner时报错ValueError: write to closed file的解决办法
- BSGS学习笔记
- matplotlib--基本setting
- 201671010442 葸铃 实验十四 团队项目评审&;课程学习总结
- 火鸡堂 对 基于云的胜利冲锋队 为了交项目干杯 的 Beta 产品测试报告
- Elasticsearch 索引文档如何使用自动生成 Id?
- linux中/dev/null与2>;&;1讲解