摘要: 概述 本文简易介绍下读写锁的策略 1.在公平锁的条件下,所有的锁都不允许插队 2.在非公平的条件下: 写锁是可以插队的(写锁插队可以避免饥饿) 读锁仅在等待队列头结点不是想获取写锁的线程的时候是可以插队的。 接下来我会从ReentrantReadWriteLock源码部分进行说明。 公平锁的条件下读 阅读全文
posted @ 2020-04-22 21:12 cnxieyang 阅读(476) 评论(0) 推荐(0)
摘要: 概述 什么是公平锁,什么是非公平锁? 公平锁是指按照线程的请求顺序去加锁; 非公平锁是指不完全按照线程的请求顺序进行加锁,一定情况下是允许插队的。 线程唤醒的开销比较大,使用非公平锁可以避免线程唤醒带来的空档期而导致资源的浪费。 公平锁与非公平锁代码演示 下面进行公平锁和非公平锁的代码演示,请看下代 阅读全文
posted @ 2020-04-22 20:01 cnxieyang 阅读(365) 评论(0) 推荐(0)
摘要: 本文从以下几个方面介绍Lock接口,分别从lock锁的介绍、为什么要用lock锁、方法介绍、可见性保证 Lock接口简介 Lock锁是一种工具,用来控制对共享资源的访问。 Lock锁和Synchronized锁两者各个有各自的使用场景,lock并不是来替换Synchronized锁的。 Lock接口 阅读全文
posted @ 2020-04-22 14:41 cnxieyang 阅读(516) 评论(0) 推荐(0)
摘要: 本文概述介绍下lock锁都有哪些,后续会进行详细介绍,请参照相关博客。 分别为:乐观锁和悲观锁、 可重入锁和非可重入锁(ReentrantLock)、 公平锁和非公平锁 共享锁和排它锁,以ReentrantReadWriteLock读写锁为例 自旋锁和阻塞锁 可中断锁 锁优化的方法 锁的分类如下 主 阅读全文
posted @ 2020-04-22 13:56 cnxieyang 阅读(1248) 评论(0) 推荐(0)
摘要: 本文带领你从各个方面了解并掌握ThreadLocal,进而彻底精通。 使用场景 1.每个线程需要一个独享的对象(不安全的工具类) 2.每个线程需要保存全局变量(可让不同的方法调用) 以下实例代码对共享的操作添加了类锁,会有性能问题,见下图 package threadPool; import jav 阅读全文
posted @ 2020-04-21 15:50 cnxieyang 阅读(339) 评论(0) 推荐(0)
摘要: 本文介绍线程池的5种状态,也可从源码中查找,见下图。本文详细介绍下这五种状态。 Running 代表当前线程池可以接受新的任务进行运行,也可以去处理队列中的任务 Shutdown 表示当前线程池不再接受新的任务,当时仍然可以处理队列中的任务,待处理完成后,状态会发生改变 Stop 表示当前线程既不接 阅读全文
posted @ 2020-04-21 15:41 cnxieyang 阅读(388) 评论(0) 推荐(0)
摘要: 本文分别从线程池的组成部分和原理方面进行讲解。 线程池的组成部分 主要包含:Executor、ExecutorService、Executors、AbstracExecutorService、ThreadPoolExecutor等,下文从集成关系方面进行说明。 线程池的原理 重点讲解线程池如何去实现 阅读全文
posted @ 2020-04-21 15:17 cnxieyang 阅读(489) 评论(0) 推荐(0)
摘要: 我们经常听说过钩子方法,高级模块会用到,本文结合线程池进行演示beforeExecute的钩子方法。见下实例代码,可控制线程池的运行和终止。 package threadPool; import java.util.concurrent.*; import java.util.concurrent. 阅读全文
posted @ 2020-04-21 14:25 cnxieyang 阅读(779) 评论(0) 推荐(0)
摘要: 本文重点讲解当线程池的任务过多时,如何去拒绝这些任务。 拒绝条件 1.线程已经shutdown了,需要拒绝 2.最大线程数或者队列已经满了,需要拒绝 拒绝策略 1.abortPolicy: 直接抛出异常 2.discardPolicy:任务丢弃,收不到通知 3.discardOldestPolicy 阅读全文
posted @ 2020-04-21 14:24 cnxieyang 阅读(948) 评论(0) 推荐(0)
摘要: 上篇博客介绍了线程池的创建的,本文重点介绍线程池应该如何关闭。 线程池停止的相关方法有:shutdown、 shutdown 关闭线程池的方法之一,调用线程池的此方法后,不再接受新的任务,待所有任务都执行关闭后,进行关闭 实例代码如下所示,不再接收新任务测试。 package threadPool; 阅读全文
posted @ 2020-04-21 12:03 cnxieyang 阅读(990) 评论(0) 推荐(0)
联系邮箱:cnxieyang@163.com