Java Nio(三) - 用NIO实现高性能socketserver
socket server是基于TCP协议的C/S通信模式下,服务器端的实现。一个socket server最主要的工作是处理网络IO,同事,高效处理网络IO也是一个socket server最重要的性能指标。
socket server是基于TCP协议的C/S通信模式下,服务器端的实现。一个socket server最主要的工作是处理网络IO,同事,高效处理网络IO也是一个socket server最重要的性能指标。
本文跳过了介绍NIO的各个部件,直接进入了整合、实战的阶段。如果你对NIO中三个部件:selector、channel、buffer不熟悉,可以先看看这个系列。
本系列介绍JAVA的NIO(New IO)系列接口。NIO通过几个部件(主要是:selector、channel、buffer),提供和传统IO不同的读写方式。它 同步非阻塞 IO。由NIO提供的接口看,它的设计思路和Unix的五个IO模型的其中一个:多路转接IO是一样的。所以,在学习具体的NIO代码实现之前,我...
ConcurrentHashMap是JDK提供的一个线程安全的Map实现。在JDK1.6中,它使用锁分离和Segment的方法实现更小粒度的锁。而在JDK1.8版本中,ConcurrentHashMap基本放弃了这一做法,而是使用CAS算法实现。本文分析的是JDK1.6版本中的实现。
volatile关键字是用于线程间通讯的特殊字段。它保证一个线程对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。也就是保证变量的可见性。另一点更重要的是,volatile读和volatile写之间有 happens-before关系。
为什么要理解JMM(Java Memory Model)模型?在了解JMM之前,我们谈论Java并发的一些问题,如synchronized关键词、volatile关键词等问题时,总是在很高层的抽象解释它们的机制,却无法解释其中的原理,甚至有一些谬误。特别是可见性的部分,如果不了解JMM,是根本无法解释的。JMM是...
一致性哈希算法是分布式系统中重要的路由算法,如果你对它的原理不熟悉,可以看看我之前写过的这篇文章。
上一篇介绍了HashMap。和HashMap一样,TreeMap也实现了Map接口,而且TreeMap实现了SortedMap接口:
HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。和HashTable一样,HashMap也实现了Map接口,这意味着两个类的接口、用法是几乎一样的。以至于一些面试题很喜欢提问HashMap和HashTable的区别。对于这类问题,与其死记硬背一些答案,不如深入到两者的实现层面里,看看...
说完List的几个实现,下面来说说Map系列的类。
LinkedList是非线程安全的List实现,只在单线程下适合使用。LinkedList是一个用双向链表实现的一个List(通过源码很容易看出),它除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。
List接口
在上一节中,已经说明了Java的类加载机制和Classloader的职责。实际上,类加载器虽然只用于实现类的加载动作,但它在Java程序里起到的作用远远不限于类加载阶段。每个Classloader,都有独立的类名称空间。所以,一个class文件被不同的classloader加载,这两个类是不相等的。JVM在判定两...
Classloader是JVM模型的一部分,JVM通过Classloader动态加载class文件到内存中使用的。
在计算机的世界里,并发的概念是:把多个任务同时进行,以节省时间/空间资源。并发是操作系统级别的概念,本文会在更高的层次讨论,所以会省略一些底层实现细节,如果你对多进程模型,多线程等相关概念不了解,先去看看Linux进程模型吧。:)