摘要:
一、简介 StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁,写锁的访问,同时是读写锁之间可以互相转换,更细粒度控制并发。 首先明确下,该类的设计初衷是作为一个内部工具类,用于辅助开发其他线程安全组件,用得好, 阅读全文
摘要:
一、前言 LockSupport工具类用于阻塞或唤醒线程。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程组阻塞和唤醒功能,而LockSupport也成为构建同步组件的基础工具。 LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thr 阅读全文
摘要:
前言 对于如何更合适的使用线程池,根据系统业务是CPU密集型 还是IO密集型。 cpu密集型: cpu使用率较高(也就是一些复杂运算,逻辑处理),所以线程数一般只需要cpu核数的线程就可以了。 这一类型的在开发中多出现的一些业务复杂计算和逻辑处理过程中。 I/O密集型: cpu使用率较低,程序中会存 阅读全文
摘要:
读写锁简介 对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写操作了。 读写锁ReentrantReadWriteLock,它表示两 阅读全文
摘要:
前言 ReentrantLock即可重入锁,实现了Lock和Serializable接口 在java环境下ReentrantLock和Synchronized都是可重入锁 ReentrantLock构造函数中提供两种锁:创建公平锁和非公平锁(默认) ReentrantLock有三个内部类 Sync、 阅读全文
摘要:
前言 为了对线程的统一管理分配,引入了线程池。我们来看看它的源码吧! 接口、类的关系 我们来看看Executor、ExecutorService、AbstractExecutorService Executor接口 Executor接口只有一个方法execute,传入线程任务参数 ExecutorS 阅读全文
摘要:
线程池的继承架构 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 在JDK5之 阅读全文
摘要:
前言 java中的线程池是运行场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。 合理使用线程池能够带来3个好处。 第一:降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三: 阅读全文
摘要:
前言 线程组,顾名思义,就是线程的组,逻辑类似项目组,用于管理项目成员,线程组就是用来管理线程。 每个线程都会有一个线程组,如果没有设置将会有些默认的初始化设置 而在java中线程组则是使用类ThreadGroup 进行抽象描述 构造器 private ThreadGroup() { this.na 阅读全文
摘要:
前言 Java.lang.Thread是Java应用程序员对Java多线程的第一站,Thread就是对Java线程本身的抽象 所以在Java中的线程编程概念中,一个Thread实例 == 一个线程 线程有哪些属性、行为,Thread大致就有哪些属性、行为。 源码 构造器 public Thread( 阅读全文