
JUC
Aristocrat l
由于个人学习太过枯燥,同时缺乏方向感,所以今天开始写博客 记录自己的学习生活
展开
-
AtomicInteger有关CAS
AtomicIntegerpublic static void main(String[] args) { AtomicInteger ai = new AtomicInteger(20); System.out.println(ai.incrementAndGet()); }在学习AtominInteger时,第一次接触了CAS,也就是在自增的时候使用CAS自旋锁解决并发问题。调用的方法时incrementAndGet方法。而这个自增的操作本质上不是一个原...原创 2022-04-25 15:39:39 · 360 阅读 · 0 评论 -
ThreadPoolExecutor源码学习
一图胜千言:源码ctl共32位,其中前3位表示线程池的状态,0(000)、1(001)、2(010)、3(011)、-1(111)各表示一种,共五种,而后29位表示线程池中的线程个数 //其中AtomicInteger变量ctl的功能非常强大:利用低29位表示线程池中线程数,通过高3位表示线程池的运行状态: private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); //Inte...原创 2022-04-12 19:36:41 · 625 阅读 · 0 评论 -
AQS——hasQueuedPredecessors方法
hasQueuedPredecessors方法的名称是:是否拥有前一个队列元素。换言之:用不用排队。返回false:不用排队。返回true:乖乖排队去。h != t返回true,(s = h.next) == null返回false以及s.thread !Thread.currentThread()返回false返回false的情况就很简单了,总共有两种返回false:第一种:h != t为false这种情况就是队列为空或者队列只有一个元素的情况。队列为空很好理解...原创 2022-04-10 18:50:31 · 2486 阅读 · 0 评论 -
AtomicInteger有关自旋锁的原子性问题
AtomicInteger public static void main(String[] args) { AtomicInteger ai = new AtomicInteger(20); System.out.println(ai.incrementAndGet()); }在学习AtominInteger时,第一次接触了CAS,也就是在自增的时候使用CAS自旋锁解决并发问题。调用的方法时incrementAndGet方法。而这个自...原创 2022-04-05 17:34:44 · 1025 阅读 · 0 评论 -
可重入锁详解
现在终于有一次学习到了锁机制,上次学习还是在学习java基础的时候遇到的,当时对于锁还只是停留在一个大致的了解上,这次是彻底的深入学习,我在学习中遇到的第一个我认为的难点就是可重入锁。我一开始想要像大多数人那样宽泛的理解:自家开门后房屋任进。后来发现这样理解有不少问题,大大忽略了锁的概念和可重入锁在这样的问题中扮演的角色。可重入锁,就是当一个类中多个方法上锁,当多个方法中嵌套调用了上锁的方法,拿到第一把锁的线程在进入其他上锁方法时,无需在次获得锁。这样...原创 2022-04-05 11:28:29 · 619 阅读 · 0 评论 -
简单上手四大函数型接口
四大函数型接口1.功能型函数接口(Function<T,R>):T为参数类型,R为返回值类型2.消费型函数接口(Consumer<T>):T为参数类型,没有返回值3.供给型函数式接口(Supplier<T>):T为返回值类型,没有参数4.断言型函数式接口(Predicate<T>):T为参数类型,返回值为Boolean类型public class Test9 { public static void main(String[]原创 2022-04-05 11:06:40 · 529 阅读 · 0 评论 -
JUC——线程池的7大参数和4种拒绝策略
线程池的优势 1.线程复用,减少线程创建、销毁的开销,提高性能 2.提高响应速度,当任务到达时,无需等待线程创建就能立即执行。 3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资 源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。线程池七大参数1.corePoolSize核心线程数。当提交一个任务时,线程池会创建一个新线程执行任务,此时线程不会复用。如果当前线程数为corePoolSi...原创 2022-04-01 16:54:28 · 1394 阅读 · 0 评论 -
JUC——阻塞队列四套API使用
public class Test5 { //阻塞队列第一种方法:允许抛异常 @Test public void test1() { //阻塞队列 //构造器参数为阻塞队列最大长度 BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3); //1.1使用add方法,当添加的元素超过队列最大长度之后,如果继续添加,那么抛出异常I...原创 2022-04-01 15:08:36 · 183 阅读 · 0 评论 -
读写锁的API使用
public class Test6 { //读写锁 @Test public void test1() { Data2 data2 = new Data2(); HashMap<Integer, String> map = new HashMap<>(); for (int i = 0; i < 9; i++) { final int temp = i; .原创 2022-04-01 15:06:55 · 384 阅读 · 0 评论