本博客系列是学习并发编程过程中的记录总结。由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅。 "并发编程系列博客传送门" Lock接口简介 在JUC包下面有一个 包,这个包提供了一系列基础的锁工具,对传统的synchronizd、wait和notify等同步机制进行补充和增 ...
分类:
其他好文 时间:
2020-02-25 12:42:11
阅读次数:
57
1、听故事把知识掌握了 在一个村子里面,有一口井水,水质非常的好,村民们都想打井里的水。这井只有一口,村里的人那么多,所以得出个打水的规则才行。村长绞尽脑汁,最终想出了一个比较合理的方案,咱们来仔细的看看聪明的村长大人的智慧。 井边安排一个看井人,维护打水的秩序。 打水时,以家庭为单位,哪个家庭任何 ...
分类:
编程语言 时间:
2020-02-21 23:56:40
阅读次数:
108
以下哪几种方式可用来实现线程间通知和唤醒:( ) A. Object.wait/notify/notifyAll B. ReentrantLock.wait/notify/notifyAll C. Condition.await/signal/signalAll D. Thread.wait/not ...
分类:
其他好文 时间:
2020-02-21 16:29:34
阅读次数:
75
通过源码可以看出 使用 CAS + synchronized 方式时 加锁的对象是每个链条的头结点,也就是 锁定 的是冲突的链表,所以再次提高了并发度,并发度等于链表的条数或者说 桶的数量。那为什么sement 不把段的大小设置为一个桶的,因为在高并发的情况下如果 ReentrantLock 发生冲 ...
分类:
其他好文 时间:
2020-02-20 13:27:46
阅读次数:
108
一、源码 1、Lock接口 void lock(); 锁 void lockInterruptibly() throws InterruptedException; 在等待锁时被中断会抛异常 boolean tryLock(); 判断锁是否可用,可用就获取 boolean tryLock(long ...
分类:
其他好文 时间:
2020-02-18 10:09:04
阅读次数:
56
1.简介 并发中常用的ReentrantLock,是一种典型的排他锁,这类锁在同一时刻只允许一个线程进行访问,实际上将并行操作变成了串行操作。在并发量大的业务中,其整体效率、吞吐量不能满足实现的需要。而且实际的业务中一般情况是读多于写,多个线程读操作不会改变已经有的数据,不会有数据的一致性问题,而一 ...
分类:
其他好文 时间:
2020-02-15 10:15:42
阅读次数:
84
Reentrantlock Reentrantlock在AQS源码解析中已经捎带着解析过了,这里不再提及 CountDownLatch CountDownLatch在AQS源码解析中也已经解析过了,这里同样不再提及 CyclicBarrier CountDownLatch 基于 AQS 的共享模式的 ...
分类:
其他好文 时间:
2020-02-12 22:21:05
阅读次数:
79
线程安全之 synchronized 和 ReentrantLock + 面试题 前面我们介绍了很多关于多线程的内容,在多线程中有一个很重要的课题需要我们攻克,那就是线程安全问题。线程安全问题指的是在多线程中,各线程之间因为同时操作所产生的数据污染或其他非预期的程序运行结果。 线程安全 1)非线程安 ...
分类:
编程语言 时间:
2020-02-07 14:31:13
阅读次数:
57
前面我们看了可重入锁ReentrantLock,其实这个锁只适用于写多读少的情况,就是多个线程去修改一个数据的时候,适合用这个锁,但是如果多个线程都去读一个数据,还用这个锁的话会降低效率,因为同一时刻只能是一个线程去读取! 本次我们看看读写锁ReentantReadWriteLock,这个锁采用了读 ...
分类:
其他好文 时间:
2020-02-06 19:55:16
阅读次数:
60
经典笔试题: 1、自定义容器,提供新增元素(add)和获取元素数量(size)方法。2、启动两个线程。线程1向容器中新增10个数据。线程2监听容器元素数量,当容器元素数量为5时,线程2输出信息并终止。 package com.gaopeng.programming.test2; import jav ...
分类:
编程语言 时间:
2020-02-05 18:13:53
阅读次数:
86