![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA多线程
ThestaRY777
这个作者很懒,什么都没留下…
展开
-
JAVA线程并发工具类笔记整理Fork-Join、CountDownLatch、CyclicBarrier、Semaphore、Exchange、Callable、FutureTask
1. Fork-Join 什么是分而治之? 规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解。分而治之思想应用:在快速排序、归并排序、动态规划等等。 工作密取(workStealing):线程A完成了工作之后可以被调度去帮线程B完成task,为了避免竞争获取任务,从相反的方向获取任务。 For...原创 2020-04-23 00:45:04 · 266 阅读 · 0 评论 -
Atomic原子操作及CAS原理
我们都知道Volatile保证了可见性、有序性和单次操作的原子性,那么像i++这种的非单次操作应该怎么保证原子性呢? 在java.util.concurrent.atomic包里面,有许多提供原子操作的类: 在这里面我们最常用的是AtomicInteger、AtomicBoolean,重点要会的应该是AtomicInteger,因为AtomicBoolean内部也是通过AtomicInteger...原创 2020-04-09 13:39:09 · 512 阅读 · 0 评论 -
JMM内存模型 Volatile 缓存一致性协议
1. 计算机多核并发缓存架构 在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(MainMemory): 2. JMM内存模型 JMM数据原子操作: read (读取) :从主内存读取数据 load (载入) :将主内存读取到的数据写入工作内存 use(使用) :从工作内存读取数据来计算 assign (赋值) :将计算好的值重新赋值到工作内存中 store (存储) :...原创 2020-04-01 18:53:29 · 489 阅读 · 0 评论 -
JAVA JDK8新特性之Lambda表达式
JAVA JDK8新特性之Lambda表达式 1.1 函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。 面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情. 函数式编程思想: ...原创 2020-03-12 11:14:01 · 519 阅读 · 3 评论 -
JAVA 线程池到底是什么
JAVA 线程池到底是什么 线程池思想概述 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来...原创 2020-03-10 19:54:14 · 374 阅读 · 0 评论 -
JAVA多线程之生产者与消费者问题
JAVA多线程之生产者与消费者问题 经典的“生产者与消费者”的问题实质上就是等待唤醒机制。 这里拿生产包子消费包子来说明等待唤醒机制如何有效利用资源: 包子铺线程生产包子,吃货线程消费包子。当包子没有时(包子状态为false),吃货线程等待,包子铺线程生产包子(即包子状态为true),并通知吃货线程(解除吃货的等待状态),因为已经有包子了,那么包子铺线程进入等待状态。接下来,吃货线程能否进一步执行...原创 2020-03-10 19:27:15 · 401 阅读 · 0 评论