JUC学习
并发学习
小白程序猿一枚
专注于后端开发
展开
-
JUC并发编程—锁的理解
锁的理解1、公平锁与非公平锁公平锁:不能够插队,必须按照先来后到的顺序执行非公平锁:可以插队(默认都是非公平锁)lock锁对应的非公平锁与公平锁的源码ReentrantLock lock = new ReentrantLock();public ReentrantLock() { sync = new NonfairSync(); }ReentrantLock lock = new ReentrantLock(true);public ReentrantLock(b原创 2021-10-16 09:58:11 · 91 阅读 · 0 评论 -
JUC并发编程—深入理解CAS与原子引用
1、深入理解CASpackage com.zkw.JUC并发编程.cas;import java.util.concurrent.atomic.AtomicInteger;public class CasDemon { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(2020); // 期望的值,新的值 /原创 2021-10-16 09:56:31 · 117 阅读 · 0 评论 -
JUC并发编程—单例模式
单例模式饿汉式package com.zkw.single;// 饿汉式单例public class Hungry { // 可能会浪费资源 private byte[] data1 = new byte[1024*1024]; private byte[] data2 = new byte[1024*1024]; private byte[] data3 = new byte[1024*1024]; private byte[] data4 = ne原创 2021-10-15 13:17:01 · 114 阅读 · 0 评论 -
JUC并发编程-Volatile
VolatileVolatile 是 java 虚拟机提供轻量级的同步机制有三点:1、保证可见性;2、不保证原子性;3、禁止指令重排1、保证可见性package com.ZKW.JUC并发编程.tvolatile;import java.util.concurrent.TimeUnit;public class JMMDemon { // 不加 volatile 线程对主内存的变化不知道,程序会变成死循环 // 加 volatile 可以保证可见性 priv原创 2021-10-16 09:53:15 · 139 阅读 · 0 评论 -
JUC并发编程-JMM
JMMJMM:java内存模型,不存在的东西,是概念、约定。1、关于JMM的一些同步的约定(1)线程解锁前,必须把共享变量立刻刷回主存(2)线程加锁前,必须读取主存中的最新值到工作内存中!(3)加锁和解锁是同一把锁线程 工作内存、主内存2、内存交互操作有8种虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、store、read和write操作在某些平台上允许例外)lock (锁定):作用于主内存的变量,把一个变量标识为线程独占原创 2021-10-16 09:51:03 · 103 阅读 · 0 评论 -
JuC并发编程-ForkJoin与异步回调
1、ForkJoin特点:工作窃取 里边维护的是双端队列package com.zkw.JUC并发编程.forkjoin;import java.util.concurrent.RecursiveTask;public class ForkJoinDemon extends RecursiveTask<Long> { private Long start; private Long end; //临界值 private Long temp =原创 2021-10-16 09:49:58 · 138 阅读 · 0 评论 -
JUC并发编程-Stream流式计算
13、Stream流式计算package com.zkw.JUC并发编程.functiom.stream;public class User { private int ID; private String name; private int age; public User() { } public User(int ID, String name, int age) { this.ID = ID; this.na原创 2021-10-16 09:46:27 · 105 阅读 · 0 评论 -
JUC并发编程-四大函数是接口
四大函数式接口1、Function(函数型接口)package com.zkw.JUC并发编程.functiom;import java.util.function.Function;/** * Function 函数型接口,有一个输入参数,有一个输出参数 * 只要是 函数型接口 都可以用lambda表达式 表示 */public class Demon1 { public static void main(String[] args) { Fu原创 2021-10-15 13:33:36 · 97 阅读 · 0 评论 -
JUC编程—阻塞队列学习
JUC并发编程—阻塞队列学习1、四组API方式抛出异常不抛出异常,有返回值阻塞等待超时等待添加add()offer()put()offer(,)移除remove()poll()take()poll(,)检测队首元素element()peek()~~ /** * 抛出异常 */ public static void test1(){ //队列的大小为3 ArrayBlockin原创 2021-10-15 13:32:18 · 87 阅读 · 0 评论 -
JUC编程—线程池
JUC并发编程—线程池学习好处:1、降低资源的消耗;2、提高相应的速度;3、方便管理1、线程池创建的三大方法package com.zkw.JUC并发编程.线程池;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;// Executors 工具类、3大方法public class Demo01 { public static void main(String[] arg原创 2021-10-15 13:31:00 · 92 阅读 · 0 评论 -
JUC编程—常用辅助类与读写锁
1、常用的辅助类1.1、CountDownLatchpackage com.zkw.JUC并发编程.add;import java.util.concurrent.CountDownLatch;//减法计数器public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch原创 2021-10-15 13:30:23 · 95 阅读 · 0 评论 -
JUC编程—集合不安全与Callable接口
1、集合类不安全11、LIst不安全package com.zkw.JUC并发编程.unsafe;import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;//java.util.ConcurrentModificationException 并发修改异常public class ListTest { public static void main(String[] args) { /**原创 2021-10-15 13:28:42 · 105 阅读 · 0 评论 -
JUC编程—8锁问题
8锁问题如何判断锁的是谁!什么是锁,锁的到底是谁锁只会锁两个东西:对象、Classpackage com.zkw.JUC并发编程.Lock8;import java.util.concurrent.TimeUnit;/** * 8锁,就是关于锁的8个问题 * 1、标准情况下,两个线程先打印 发短信 还是 打电话? 先 发短信 在 打电话 * 2、sendSms 延时4秒钟,两个线程先打印 发短信 还是 打电话? 先 发短信 在 打电话 * 解释:synchronized 锁的对象是方法原创 2021-10-15 13:26:15 · 133 阅读 · 0 评论 -
JUC编程—生产者与消费者
生产者与消费者面试的:单例模式、排序问题、生产者消费者、死锁(需要会手写)1、synchronzied 版的package com.zkw.JUC并发编程;/** * 线程通信,生产者与消费者问题: 等待唤醒,通知唤醒 * 线程交替进行 A B同时操作一变量 num = 0; * A num+1 * B num-1 */public class PC { public static void main(String[] args) { Data data =原创 2021-10-15 13:25:15 · 115 阅读 · 0 评论 -
JUC编程—Lock锁与sychronized锁
Lock锁与sychronized锁(重点)1、sychronized锁如果想测试争抢同一个资源出现错误,建议加上一个延时也就是sleep,这样会更明显。package com.zkw.JUC并发编程;import static java.lang.Thread.sleep;/** * 真正的多线程开发 公司中的多线程开发 降低耦合性 * 线程就是一个单独的资源类,没有任何附属的操作 * 1. 属性、方法 */public class SaleTicketDemon01 {原创 2021-10-15 13:23:05 · 100 阅读 · 0 评论 -
JUC并发编程-—线程与进程
线程和进程进程:一个程序,例如QQ.exe Music.exe 程序集合一个进程往往可以包含多个线程,至少包含一个java默认有几个线程?2个 main、GC线程:开了一个进程Typora,写字,自动保存(线程负责的)对于java而言:Tread、Runnable、Callablejava真的可以开启线程吗?不可以,它是调用本地的方法开启的 public synchronized void start() { /** * This method is no原创 2021-10-15 13:22:10 · 124 阅读 · 0 评论