java并发编程
zhengtuqi
这个作者很懒,什么都没留下…
展开
-
Java多线程并发编程学习笔记【同步器笔记】
在日常开发中经常会遇到需要在主线程中开启多个线程去并行执行任务,并且主线程需要等待所有子线程执行完毕后再进行汇总的场景。CountDownLatch、CyclicBarrier均是为应对上面场景的类。此外还有Semaphore也可以起到阻塞的作用。 一、CountDownLatch CountDownLatch(int count):构造方法,设置计数量; void countDown():...原创 2020-01-03 16:34:57 · 128 阅读 · 0 评论 -
Java多线程并发编程学习笔记【线程池笔记】
ThreadPoolExecutor运行状态有五种: RUNNING:接受新的任务,并处理队列任务。(Accept new tasks and process queued tasks ) SHUTDOWN:不接受新的任务,但是会处理队列中的任务。(Don't accept new tasks, but process queued tasks ) STOP: 不接受新的任务,不处理队列...原创 2020-01-03 10:29:20 · 208 阅读 · 0 评论 -
Java多线程并发编程学习笔记【并发包中队列笔记】
JUC包下主要队列类关系图如下(基于JAVA1.8) 主要有DelayQueue、PriorityBlockingQueue、ArrayBlockingQueue、LinkedBlockingQueue、ConcurrentLinkedQueue,还有双向队列Deque相关类暂时不看 上面五个类按照实现方式来分可以分为,链表实现和数组实现。数组又分循环数组实现的有界队列,和完全二叉树实现的...原创 2019-12-31 10:20:46 · 114 阅读 · 0 评论 -
Java多线程并发编程学习笔记【并发包中的锁原理】
阻塞的实现好像都是用for(;;)循环获取 其他笔记: AQS是双向链表结构 synchronized1.6之前,无论有没有竞争(线程交替执行,没有竞争)都会进行操作系统操作进行内核切换,是重量级锁,1.8之后是轻量锁,假如没有竞争只是在JVM层级加上锁,1.8以后性能比reentrantlock要优越,java官方推荐使用synchronized。 reentrantlock可以选择使用...原创 2019-12-24 01:16:42 · 220 阅读 · 0 评论 -
Java多线程并发编程学习笔记【JUC包相关类】
1、AtomicInteger、AtomicLong、AtomicBoolean等等 这几个类可以实现多线程之间的原子性递增或递减或取值操作,原理一个实例拥有一个原子变量,然后进行CAS操作。 2、LongAdder 然而AtomicLong等类存在一个主要问题就是,在高并发下大量线程会同时去竞争更新同一个原子变量,但由于同时只有一个线程的CAS操作会成功,导致其他线程竞争失败后,会无限循环...原创 2019-12-23 05:21:02 · 150 阅读 · 0 评论 -
Java多线程并发编程学习笔记【基础知识2】
一、多线程并发编程概念 首先需要分清并发和并行的概念。并发是指同一时间段有多个任务同时执行,而并行指的是在单位时间内有多个任务同时在执行。并发任务是建立在一段时间内cpu不断切换任务的基础上的,所以单核单线程cpu每个时间点只能执行一个任务,而并行是同一时间就有多个任务在执行,任务在不同的cpu上(针对单线程cpu而言)执行。 1、并发需要解决的问题 不同线程之间的读写操作,导致共享变量的内...原创 2019-12-18 22:56:18 · 225 阅读 · 1 评论 -
Java多线程并发编程学习笔记【基础知识1】
该系列博文大多为阅读《java并发编程之美翟陆续、薛宾田著 》的笔记 一、线程状态 线程总共有五种状态:新建(newThread)、就绪(runnable)、运行(running)、死亡(dead)、阻塞(blocked)。 0、线程状态的转换 其中等待队列是阻塞状态,不过不是调用的是object类的方法,而不是Thread类的相关方法。 1、wait()方法,Object类的方...原创 2019-12-14 15:49:59 · 183 阅读 · 0 评论