logo头像
书院的十三先生

Java并发编程入门(十六)正确理解两类线程池

一、例子一网站的请求要记录调用耗时日志,此日志并不是非常重要,不希望影响核心业务流程,要在主流程之外独立处理,因此可以在请求调用完成后由独立线程来记录,处理方式有如下几种: 1.每个请求先将数据放入队列中,由已运行的线程从队列中获...

Java并发编程入门(十三)读写锁和缓存模板

一、读写锁提到读写锁,都能想到是锁优化方式之一的锁分离,实现效果是读读不互斥,读写互斥,写写互斥。 读写锁本身比较简单,下面通过一个例子看看读写锁的使用。1.Cache是一个抽象类,实现了缓存的基本方法,子类只需要实现init方法...

Java并发编程入门(十)锁优化

一、锁优化锁的优化如下:1.使用无锁方案2.避免死锁3.减小锁持有时间4.锁分离5.锁粗化6.减小锁粒度 无锁方案单独介绍,避免死锁可参考:Java并发编程入门(九)死锁和死锁定位。 二、减小锁持有时间只对有同步需要的代码块做...

Java并发编程入门(九)死锁和死锁定位

一、死锁条件死锁:一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。 满足死锁的四个条件:1.互斥,共享资源 X 和 Y 只能被一个线程占用2.占有且等待,线程 T1 已经取得共享资源 X,在等待共享资源Y的时候,不释放共...