
JUC并发编程
文章平均质量分 94
并发编程,不仅是现在互联网必需的技术,也是面试的敲门砖。并发是众多框架的核心,JUC源码更是教科书级别,对提高java编程也有很大的提高
余生之君
越努力,越幸运
展开
-
线程池解析
线程池解析java线程对应内核线程,创建与销毁需要切换到内核态,是系统开销较大的操作,因此需要设法复用线程。线程池就是一个线程缓存,负责对线程统一分配,调优与监控,线程池的优势:提高性能:重用线程减少线程创建消亡的开销提高响应速度:任务到达时可以立即执行,不需要再去创建线程方便管理线程:便于统一分配、调控和监控执行Runnable任务流程简单说处理任务的优先级为:核心线程、任务队列、最大线程,如果三者都满了,使用handler处理被拒绝的任务。具体如何实现的呢?/*** 在将来某个时间执原创 2021-08-05 12:54:38 · 1183 阅读 · 0 评论 -
Fork/Join框架
一、引言算法领域有一种基本思想叫做“分治”,所谓“分治”就是将一个难以直接解决的大问题,分割成一些规模较小的子问题,以便各个击破,分而治之。比如:对于一个规模为N的问题,若该问题可以容易地解决,则直接解决;否则将其分解为K个规模较小的子问题,这些子问题互相独立且与原问题性质相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解,这种算法设计策略叫做分治法。许多基础算法都运用了“分治”的思想,比如二分查找、快速排序等等。基于“分治”的思想,J.U.C在JDK1.7时引入了一套Fork/Join转载 2020-09-17 19:07:36 · 521 阅读 · 0 评论 -
AQS简单学习
抽象队列同步器 AbstractQueuedSynchronizer,是一个用于构建锁、同步器、协作的工具类或者框架。AQS的源码还是比较复杂的,所以应该先理解其作用,场景,再去理解他的结构,原理。为什么要有AQS?我们学过的ReentrantLock和semaphore都有共同点,类似个闸门,只允许一定数量的线程通过。还都是同步的,底层都是AQS.他们的原理里都有个继承AQS的内部类A...原创 2020-03-29 17:13:01 · 347 阅读 · 0 评论 -
来说一说你对锁都怎么分类?
锁是用来控制对共享资源的访问,java中除了synchronize,提供了lock这个大家族。他们有各自不同的适用场景,lock提供了更丰富的功能。lock的基本使用直接来看Lock接口的定义,看看比synchronized多了哪些功能?public interface Lock { // 加锁 void lock(); // 非阻塞获取锁 boolea...原创 2020-03-23 23:09:51 · 258 阅读 · 0 评论 -
ThreadLocal
使用场景:用来解决线程安全问题,如每个线程都有自己的SimpleDateFormat;还可以用来存储每个线程特有的内容,如用户信息,日志记录的traceID,省去传参的麻烦。原理如图:每个线程都有一个属性ThreadLocal.ThreadLocalMap threadLocals = null;明显它是map结构,key是ThreadlLocal本身(this),value是我们用户存储...原创 2020-03-22 21:39:45 · 298 阅读 · 0 评论 -
并发工具概览
并发工具总的可以分为三类:为了并发安全的为了管理线程提高效率的为了线程协作之间配合的为了并发安全的互斥同步synchronized、ReentrantLock、ReadWriteLock等各种锁,当然也包括Collections.SynchronizedMap,使用synchronized的集合Vector、HashTable非互斥同步主要包括Atomic包下的很多原子类结...原创 2020-03-20 22:11:27 · 292 阅读 · 0 评论 -
面试必问,如何控制多个线程的执行顺序
面试中经常被遇到一个问题:现在有三个线程,分别执行会打印A,B,C,如何编码使得三个线程顺序执行,即输出‘ABCABC’,这道题看似简单,但是如果对多线程不熟悉还真的不好回答,好多朋友回答的并不好。下面列举几种方法,代码手工编写,都已测试lock和Synchronized都是通过线程间的通信,唤醒指定的线程实现顺序执行1.使用lockpublic class Task2Lock { ...原创 2020-03-08 22:00:37 · 993 阅读 · 0 评论 -
synchronized的底层原理
synchronized使用方式我们知道并发编程会产生各种问题的源头是可见性,原子性,有序性。而synchronized能同时保证可见性,原子性,有序性。所以我们在解决并发问题的时候经常用synchronized,当然还有很多其他工具,如volatile。但是volatile只能保证可见性,有序性,不能保证原子性。参见之前的文章volatile关键字——保证并发编程中的可见性、有序性sync...原创 2020-02-19 12:09:43 · 526 阅读 · 0 评论 -
volatile关键字——保证并发编程中的可见性、有序性
文章目录一.内存模型的相关概念二.并发编程中的三个概念1.原子性2.可见性3.有序性三.Java内存模型1.原子性2.可见性3.有序性四.深入剖析volatile关键字1.volatile关键字的两层语义2.volatile保证原子性吗?3.volatile能保证有序性吗?4.volatile的原理和实现机制五.使用volatile关键字的场景  ...转载 2019-09-08 17:01:18 · 1440 阅读 · 0 评论