摘要:
1. 为什么要使用线程池 线程是很占用系统资源的,对线程管理不善很容易导致系统问题。因此,我们最好使用线程池来管理线程,使用线程池主要有如下好处: 降低资源消耗。通过复用线程可以降低线程关闭的次数,从而尽可能降低系统性能损耗; 提升系统响应速度。通过复用线程,省去创建线程的过程,从而提升系统的响应速 阅读全文
摘要:
锁的状态 锁一共有四种状态(由低到高的次序):无锁状态,偏向锁状态,轻量级锁状态,重量级锁状态锁的等级只可以升级,不可以降级。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率。 偏向锁 大多数情况下,锁不仅不存在多线程竞争,而且总是由同一个线程多次获得,为了让线程获得所得代价更低,引入 阅读全文
摘要:
锁削除 锁削除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行削除。锁削除的主要判定依据来源于逃逸分析的数据支持,如果判断到一段代码中,在堆上的所有数据都不会逃逸出去被其他线程访问到,那就可以把它们当作栈上数据对待, 认为它们是线程私有的,同步加锁自然就 阅读全文
摘要:
多线程对性能最大的影响是阻塞,挂起线程和恢复线程的操作都需要转入内核态中完成,这个过程时需要消耗系统资源的。实际上,许多应用的共享数据的锁定状态只会持续很短的时间,为了这段时间去挂起和恢复线程并不值得。于是,我们可以让后面请求锁的线程“稍等一会”,等待持有锁的线程会不会很快就释放了锁。为了让线程在原 阅读全文
摘要:
synchronized是一种独占式的重量级锁,在运行到同步方法或者同步代码块的时候,让程序的运行级别由用户态切换到内核态,把所有线程挂起,通过操作系统的指令,去调度线程。这样会频繁出现程序运行状态的切换,会消耗系统资源。 synchronized实现原理 synchronized是在jvm中实现的 阅读全文
摘要:
一、AQS介绍 AQS,即AbstractQueuedSynchronizer, 抽象队列同步器,它是Java多线程模块用来构建锁和其他同步组件的基础框架。来看下同步组件对AQS的使用: AQS是一个抽象类,主是是以继承的方式使用。AQS本身是没有实现任何同步接口的,它仅仅只是定义了同步状态的获取和 阅读全文