![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java 并发编程
LeoStudying
奋斗中的程序猿
展开
-
11 死锁编码以及定位分析
产生死锁的原因 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果无外力的干涉那它们都将无法推进下去,如果系统的资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22...原创 2020-04-13 15:17:49 · 111 阅读 · 0 评论 -
10 线程池用过吗?生产上你如何设置合理参数?
线程池的拒绝策略你谈谈? 是什么 等待队列已经满了,再也塞不下新的任务,同时线程池中的线程数达到了最大线程数,无法继续为新任务服务。 拒绝策略 AbortPolicy:处理程序遭到拒绝将抛出运行时 RejectedExecutionException CallerRunsPolicy:线程调用运行该任务的 execute 本身。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度...原创 2020-04-09 22:19:43 · 164 阅读 · 0 评论 -
09 线程池使用过吗?谈谈对 ThreadPoolExector 的理解?
为什使用线程池,线程池的优势? 线程池用于多线程处理中,它可以根据系统的情况,可以有效控制线程执行的数量,优化运行效果。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 主要特点为: 线程复用 控制最大并发数量 管理线程 主要优点 降低...原创 2020-04-09 22:18:48 · 131 阅读 · 0 评论 -
04 原子类 AtomicInteger 的 ABA 问题谈一谈?原子更新引用知道吗
原子引用 1 2 3 4 5 6 7 8 9 10 public class AtomicReferenceDemo { public static void main(String[] args) { User cuzz = new User("cuzz", 18); User faker = new U...原创 2020-04-09 22:04:26 · 210 阅读 · 0 评论 -
02 请谈谈你对 volatile 的理解
olatile 是 Java 虚拟机提供的轻量级的同步机制 保证可见性 禁止指令排序 不保证原子性 JMM(Java 内存模型) 你谈谈 基本概念 JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规定或则规范,通过这组规范定义了程序中的访问方式。 JMM 同步规定 线程解锁前,必须把共享变量的值刷新回主内存 线程加锁前,必须读取主内存的最新值到自己的工作内存 加锁解...原创 2020-04-09 22:12:14 · 93 阅读 · 0 评论 -
03 CAS 你知道吗?
CAS 你知道吗? 1 2 3 4 5 6 7 8 9 10 11 public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(666); // 获取真实值,...原创 2020-04-09 22:03:02 · 114 阅读 · 0 评论 -
08 synchronized 和 Lock 有什么区别?
原始结构 synchronized 是关键字属于 JVM 层面,反应在字节码上是 monitorenter 和 monitorexit,其底层是通过 monitor 对象来完成,其实 wait/notify 等方法也是依赖 monitor 对象只有在同步快或方法中才能调用 wait/notify 等方法。 Lock 是具体类(java.util.concurrent.locks.Lock)是...原创 2020-04-09 22:10:34 · 110 阅读 · 0 评论 -
07 堵塞队列你知道吗?
阻塞队列有哪些 ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)对元素进行排序。 LinkedBlokcingQueue:是一个基于链表结构的阻塞队列,此队列按 FIFO(先进先出)对元素进行排序,吞吐量通常要高于 ArrayBlockingQueue。 SynchronousQueue:是一个不存储元素的阻塞队列,每个插入操作必须等到另...原创 2020-04-09 22:09:46 · 95 阅读 · 0 评论 -
06 CountDownLatch/CyclicBarrier/Semaphore 使用过吗?
CountDownLatch 让一些线程堵塞直到另一个线程完成一系列操作后才被唤醒。CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被堵塞,其他线程调用 countDown 方法会将计数减一(调用 countDown 方法的线程不会堵塞),当计数其值变为零时,因调用 await 方法被堵塞的线程会被唤醒,继续执行。 假设我们有这么一个场景,教室...原创 2020-04-09 22:08:36 · 114 阅读 · 0 评论 -
05 java 中锁你知道哪些?请手写一个自旋锁?
公平和非公平锁 是什么 公平锁:是指多个线程按照申请的顺序来获取值 非公平锁:是值多个线程获取值的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,可能会造成优先级翻转或者饥饿现象 两者区别 公平锁:在并发环境中,每一个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个就占有锁,否者就会加入到等待队列中,以后会...原创 2020-04-09 22:07:05 · 212 阅读 · 0 评论