JUC(3)】的更多相关文章

您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面把线程相关的生命周期.关键字.线程池(ThreadPool).ThreadLocal.CAS.锁和AQS都讲完了,现在就剩下怎么来用多线程了.而要想用好多线程,其实是可以取一些巧的,比如JUC(好多面试官喜欢问的JUC,就是现在要讲的JUC).JUC就是java.util.concurrent的首字母缩写,它是Java并发工具包就是中提供的各种工具类的统称,主要分为几大类: 1.同步器: 2.线程安全的容器: 3.阻塞队列: 4.一些特…
文章目录 1.JMM 2.volatile 3.单例模式 1.JMM Volatile是java虚拟机提供轻量级的同步机制 1.保证可见性 2.不保证原子性 3.禁止指令重排 什么是JMM java内存模型,不存在的东西,概念.约定 1.线程解锁前,必须把共享变量立刻刷回主存(线程将主存中的变量复制一份到线程中) 2.线程加锁前,必须读取主存中的最新值到工作内存中 3.加锁和读锁是同一把锁 两个线程同时执行,假如一个线程修改变量.另外一个线程没有及时得到,就会出错. 内存交互操作 内存交互操作有…
1.线程和进程 进程:一个程序,微信.qq...程序的集合.(一个进程包含多个线程,至少包含一个线程.java默认有两个线程:主线程(main).垃圾回收线程(GC) 线程:runnable.thread .callable java开不了线程,在源码中可以看出,调用的是底层的方法 private native void start0(); 2.并发和并行 并发:交替 并行:同时(同一个时间) 并发编程的本质:充分利用cpu的资源 3.线程的状态 看源码 public enum State {…
文章目录 1.CAS 2.原子引用解决ABA问题,版本号.修改后,可以看到 1.CAS package com.cas; import java.util.concurrent.atomic.AtomicInteger; /** * CAS compareAndSet:比较并交换 */ public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicIn…
文章目录 1.四大函数式接口(必须掌握) 1.1 function 1.2 Predicate 1.3 Consumer 1.4 Supplier 1.四大函数式接口(必须掌握) 1.lambda表达式 2.函数式接口 3.链式编程 4.stream流式计算 函数式接口:只有一个方法的接口 @FunctionalInterface public interface Runnable { public abstract void run(); } 超级多的FunctionalInterface 简…
1.读写锁ReadWriteLock package com.readlock; import java.util.HashMap; import java.util.Map; /** * ReadWriteLock */ public class ReadWriteLockDemo { public static void main(String[] args) { MyCache myCache = new MyCache(); for (int i = 0; i < 5; i++) { f…
cmd目录切换 D:\>cd /d D:\Program Files\Java\jdk1.8.0_201\bin 1. JUC 简介 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中的 Collection 实现等; 2. volatile 关键字 volatile 关键字: 当多个线程进行操作共享数据时,可以…
线程不安全集合类 ArrayList List是线程不安全的集合类,底层是Object数组实现,初始化容量是10(其实是一个空数组,第一次扩容时,将数组扩容为10),其后每次扩容大小为当前容量的一半(oldCapacity >> 1). 初始化 /** * Constructs an empty list with an initial capacity of ten. */ public ArrayList() { this.elementData = DEFAULTCAPACITY_EMP…
文章目录 1.集合类不安全 2.在高并发情况下arraylist()并不安全 3.高并发下set并不安全 3.测试map(高并发情况下出现问题) 1.集合类不安全 2.在高并发情况下arraylist()并不安全 CopyOnWriteArrayList中的add方法是使用的lock锁 使用vector,add方法使用的是synchronized修饰 juc的解决方法 3.高并发下set并不安全 hashSet的底层 hashMap 3.测试map(高并发情况下出现问题) 解决 Concurre…
文章目录 1.ForkJoin 1.ForkJoin ForkJoin 在JDK1.7 ,并执行任务!提高效率,大数据量 大数据:Map Reduce (把大任务拆分为小任务) ForkJoin特点:工作窃取 这个里面维护的是双端队列 例子.异步调用线程 package com.completablecuture; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionExcepti…