再读线程池源码概述线程池故名思意就是存放线程的池子。线程是JVM的稀缺资源,使用线程池可以减少线程的创建和销毁的次数,降低系统的资源消耗。当有任务到达的时候,无效等待创建新的线程便能立即执行,提高了响应速度。使用线程池还可以方便对线程进行管理。 ThreadPoolExecuter是线程池框架的一个核心类,下面就对ThreadPoolExecuter进行分析。2020-04-13
SpringMVC源码分析之一个请求的处理概述SpringMVC是一种web层的mvc框架,用于替代Servlet,主要用于处理和相应请求,获取表单参数,表单校验。使用SpringMVC可以简化编程。 SpringMVC底层的执行流程首先通过一张流传广泛的图,来了解一下大致的流程。2020-02-06
SpringMVC源码分析一什么是Servlet?Servlet实际是Server+Applet的缩写,表示一个服务器应用。Servlet是JavaEE规范的一部分。 在Servlet3.1中,它的结构图如下:2020-02-05
FutureTask源码分析概述Future表示一个任务的生命周期,是一个可取消的异步运算,可以把它看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对结果的访问。FutureTask为Future提供了基础实现,如获取任务执行结果何取消任务等。如果尚未完成,获取任务执行结果的线程会被阻塞,一旦执行结束,任务就不能被重启或取消。FutureTask常用来封装Clallable和Runnable,也可以作为一个任务提交到线程池中执行。2020-01-21
LinkedTransferQueue源码分析概述LinkedTransferQueue是单向链表结构的无界阻塞队列。它通过CAS和LockSupport来实现线程安全的。它采用一种预占模式,意思是当消费者线程取元素时,如果队列为空,那就生成一个节点(节点元素为null)入队,然后消费者线程被等待在这个节点上,后面生产者线程入队时发现一个元素为null的节点,就会直接将元素填充到该节点,并唤醒该节点等待的线程,被唤醒的消费者线程取走元素并返回。2020-01-18
ConcurrentLinkedQueue源码分析概述ConcurrentLinkedQueue是一个单向链表结构的无界并发队列。通过CAS来实现并发安全。内存一致性遵循对ConcurrentLinkedQueue的插入插入操作先行于访问会或移除操作。2020-01-17
ThreadPoolExecutor源码分析概述任务是一组逻辑工作单元,而线程则是是任务异步执行的机制。通过线程池就可以简化线程的管理工作。ThreadPoolExecutor是线程池的核心实现。线程池中预先提供了指定数量的可重用的线程,使用线程池避免了线程创建和终止的开销,节省了系统的资源。并且线程池维护了一些基础的数据统计,方便了线程的监控和管理。2020-01-17
ConcurrentSkipListMap源码分析概述ConcurrentSkipListMap是一个线程安全的有序的哈希表,并发安全主要由CAS来实现。内部的使用了跳表这种数据结构。ConcurrentSkipListSet的底层是基于ConcurrentSkipListMap实现的。2020-01-16
CopyOnWriteArrayList,CopyOnWriteArraySet源码分析概述CopyOnWriteArrayList是一个线程安全的ArrayList,通过内部的volatile数组和显示锁ReentrantLock来实现线程安全。CopyOnWriteArraySet的底层也是基于CopyOnWriteArrayList实现的。CopyOnWriteArrayList更适合于读多写少的环节。2020-01-15
ConcurrentHashMap源码分析概述ConcurrentHashmap是一个支持并发检索和并发更新的线程安全的HashMap,它是不支持空key和value的。ConcurrentHashMap在JDK1.7之前使用的Lock和Segment(分段锁)来实现并发安全的,JDK1.8改用CAS和synchronized来实现的。我们这次主要分析JDK1.8中的实现方式。2020-01-14