BIO&NIO&AIO


BIO同步阻塞模型,一个客户端连接对应一个处理线程缺点IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源如果线程很多,会导致服务器线程太多,压力太大应用场景BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,但程序简单易理解图解代码Server

数据结构与算法(十五)堆树


定义是一颗完全二叉树每一个结点都大于等于它的子结点(大顶堆),或者小于等于它的子结点(小顶堆)图解堆的插入过程从下往上从上往下其插入的过程就叫做堆化堆的删除过程初始化堆的过程代码实现publicclassHeapTree{privateint[]arr;publicHeapTree(){}publi

并发编程(五)synchronized


并发安全问题多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问,实际上,

并发编程(四)volatile关键字


volatile原理与内存语义volatile是JVM提供的轻量级的同步机制volatile语义有以下两个作用:可见性:保证被volatile修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。有序性:禁止指令重排。vol

并发编程(三)原子性&可见性&有序性


原子性,可见性,有序性原子性:原子性指的是一个操作是不可中断的,即使是在多线程环境下,一个操作一旦开始就不会被其他线程影响。可见性:可见性指的是在多线程环境下,一个线程修改了某个变量的值,其他线程是否能够马上感知到这个变量的新值。有序性:在JVM的即时编译器和计算机处理器中,在把程序编译成机器码指令