
JUC并发编程
文章平均质量分 57
InsistCode
不能停下来呀
展开
-
JMM及Volatile
了解JMM需要我们去知道什么是Volatile。谈谈你对Volatile的理解:1.保证可见性2.不保证原子性3.禁止指令重排那么什么是JMM呢?其实JMM只是一个概念,并不是显示存在的东西。JMM:Java内存模型关于JMM的同步约定:1.线程解锁前需要共享变量立刻刷到主存中。2.线程加锁前必须读取主存中的最新值到工作内存中。3.加锁和解锁必须是一把锁。内存划分JMM的内存主要划分为主内存和工作内存内存相关操作内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的原创 2021-01-26 17:43:51 · 225 阅读 · 1 评论 -
ForkJoin分支合并
所谓分支合并就是将任务分解为多个小任务,从小任务中得到不同的结果,再将结果合并为总的结果。我们通过代码的方式去理解Fork Join。package com.ys.forkjoin;import java.util.concurrent.RecursiveTask;/** * 使用forkjoin处理大数据量相加问题, 可以解决效率问题 */public class Demo1 extends RecursiveTask<Long> { private Long sta原创 2021-01-26 15:31:42 · 139 阅读 · 0 评论 -
Stream 流式计算
package com.ys.function;import java.util.Arrays;import java.util.List;/** * 对5个对象进行筛选 * 1.ID必须是偶数 * 2.年龄必须大于23 * 3.用户名转为大写字母 * 4.用户名字母倒序 * 5.输出一个用户 * */public class Demo5 { public static void main(String[] args) { User u1 = new .原创 2021-01-26 14:15:57 · 144 阅读 · 0 评论 -
四大函数式接口
函数式接口:一个接口中只包含一个方法,例如Runnable和Callable接口,分别只有一个run()和call()。Consumer :消费型接口只有输入,没有返回package com.ys.function;import java.util.function.Consumer;public class Demo3 { public static void main(String[] args) {// Consumer<String> cons原创 2021-01-26 13:37:25 · 146 阅读 · 0 评论 -
线程池
我们需要去理解池化技术。池化技术可以优化资源的使用,我们常见的池有线程池、常量池、连接池等。池化说简单点就是预先准备好,然后需要拿的直接过来拿取,用完之后在进行归还。线程池的好处是什么?可以控制并发量,实现线程的复用及线程的管理。降低资源的消耗方便对线程的管理提高系统的运行速度线程池我们需要了解什么东西?1. 三大方法2. 七大参数3. 四种拒绝策略线程池的三大方法ExecutorService threadPool = Executors.newSingleThreadEx原创 2021-01-23 20:43:05 · 142 阅读 · 0 评论 -
阻塞队列BlockingQueue
对于阻塞队列的理解:一个队列会进行写、取操作,我们都知道队列的先进先出的(FIFO),对于写入来讲 阻塞情况的发生是:当队列满了,无法进行写操作时就会发生阻塞。对于取来说,队列中没有数据就会发生阻塞等待,等待着生产。 这两种情况是不得不阻塞。对于BlockingQueue我们可以去了解它的继承关系。队列的使用:添加和移除,BlockingQueue有四组API,分别是在超出容量和取不到元素时是抛出异常还是给出返回值亦或进行阻塞等待还是进行超时等待。要进行不同的结果需要使用不同的方法。原创 2021-01-23 17:06:49 · 101 阅读 · 0 评论 -
读写锁ReadWriteLock
ReadWriteLock是一把读写锁,更加的细粒,我们通过普通的锁也可以完成但是这把锁更加的具有针对性。我们来代码实验,先看看没有锁的package com.rw;import java.util.HashMap;import java.util.Map;public class ReadWriteLockDemo { public static void main(String[] args) { MyCache myCache = new MyCache();原创 2021-01-23 15:42:25 · 121 阅读 · 0 评论 -
JUC—CountDownLatch(减法计数器)、CyclicBarrier(加法计数器)、Semaphore(计数信号量)
CountDownLatch(减法计数器)代码理解:package com.CountDownLatch;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new Co原创 2021-01-23 14:48:45 · 401 阅读 · 0 评论 -
八锁现象理解锁
接下来以代码为例来理解锁的八种情况:TimeUtils工具类:API提供的常用工具类,时间处理。1、以下代码是先发短信还是先打电话?package com.yy;import java.util.concurrent.TimeUnit;public class Test1 { public static void main(String[] args) { Phone phone = new Phone(); new Th原创 2021-01-20 23:04:50 · 440 阅读 · 0 评论 -
集合类不安全问题解决方案
一、List我们来看一下ArrayList的线程安全吗?package com.yy;import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;public class ListTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); f原创 2021-01-22 15:29:15 · 231 阅读 · 1 评论