![](https://img-blog.csdnimg.cn/d53cbc141fff4ae199e7c8e542469ca7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC多线程并发编程的详解
文章平均质量分 54
多线程高并发的详细讲述
Mr.Aholic
全栈开发工程师 主java后端。喜欢旅游,已经旅游的城市地点:河南老家、广州、佛山、深圳、上海、山西、长沙、张家界、武汉、新疆-乌鲁木齐、新疆-吐鲁番、云南-昆明,郑州等。备考明年的 高级系统分析师 和 系统架构师【2022届毕业生---软件工程专业】
展开
-
JAVA实现心跳检测【长连接】
JAVA实现心跳检测【长连接】原创 2023-02-15 22:37:50 · 21386 阅读 · 3 评论 -
java开启线程的四种方法
java开启线程的四种方法原创 2023-02-15 22:17:30 · 4554 阅读 · 0 评论 -
Java模拟生产者-消费者问题。生产者不断的往仓库中存放产品,消费者从仓库中消费产品。其中生产者和消费者都可以有若干个。在这里,生产者是一个线程,消费者是一个线程。仓库容量有限,只有库满时生产者不能存
需求分析:生产者生产产品,存放在仓库里,消费者从仓库里消费产品。程序分析:1、生产者仅仅在仓储未满时候生产,仓满则停止生产。2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。3、当消费者发现仓储没产品可消费时候会通知生产者生产。4、生产者在生产出可消费产品时候,应该通知等待的消费者去消费。package duoxiancheng;public class ProducersAndConsumers { public static void main(String[] args) {原创 2021-01-19 13:37:46 · 970 阅读 · 1 评论 -
多线程学习笔记
多线程学习笔记一、线程 | 进程 | 多线程线程:操作系统能够进行运算调度的最小单位、线程是独立调度和分派的基本单位、同一进程中的多条线程将共享该进程中的全部系统资源。一个进程可以有很多线程,每条线程并行执行不同的任务进程:系统进行资源分配和调度的基本单位(进程是执行程序的一次过程。程序:是指令和数据的有序集合,静态)多线程:从软件或者硬件上实现多个线程并发执行的技术。(并发:时间片轮回,每隔一段时间处理不同的程序,时间短。并行:同时运行)二、创建方式1、继承Thread类继承Thread类原创 2021-08-02 19:29:49 · 227 阅读 · 2 评论 -
JUC(3)
文章目录1、集合类不安全2、在高并发情况下arraylist()并不安全3、高并发下set并不安全3、测试map(高并发情况下出现问题)1、集合类不安全2、在高并发情况下arraylist()并不安全CopyOnWriteArrayList中的add方法是使用的lock锁使用vector,add方法使用的是synchronized修饰juc的解决方法3、高并发下set并不安全hashSet的底层hashMap3、测试map(高并发情况下出现问题)解决原创 2022-01-09 15:06:50 · 206 阅读 · 1 评论 -
JUC(8)Stream流式计算
文章目录1、ForkJoin1、ForkJoinForkJoin 在JDK1.7 ,并执行任务!提高效率,大数据量大数据:Map Reduce (把大任务拆分为小任务)ForkJoin特点:工作窃取这个里面维护的是双端队列例子、异步调用线程package com.completablecuture;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;原创 2021-12-29 15:42:22 · 204 阅读 · 1 评论 -
JUC(11)各种锁的理解(公平锁、可重入锁、自旋锁、死锁)
文章目录1、公平锁、非公平锁2、可重入锁3、自旋锁4、死锁1、公平锁、非公平锁公平锁:非常公平、不能插队、必须先来后到非公平锁:非常不公平、可以插队、(默认非公平)可以修改为公平锁2、可重入锁拿到外边的锁、就会自动拿到里边的锁。package com.lock;/** * synchronized */public class Demo1 { public static void main(String[] args) { Phone phone =原创 2021-12-29 15:41:18 · 251 阅读 · 1 评论 -
JUC(10)深入理解CAS和ABA
文章目录1、CAS2、原子引用解决ABA问题,版本号。修改后,可以看到1、CASpackage com.cas;import java.util.concurrent.atomic.AtomicInteger;/** * CAS compareAndSet:比较并交换 */public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = ne原创 2021-12-29 14:10:31 · 380 阅读 · 1 评论 -
JUC(8)JMM
文章目录1、JMM2、volatile3、单例模式1、JMMVolatile是java虚拟机提供轻量级的同步机制1、保证可见性2、不保证原子性3、禁止指令重排什么是JMMjava内存模型,不存在的东西,概念、约定1、线程解锁前,必须把共享变量立刻刷回主存(线程将主存中的变量复制一份到线程中)2、线程加锁前,必须读取主存中的最新值到工作内存中3、加锁和读锁是同一把锁两个线程同时执行,假如一个线程修改变量、另外一个线程没有及时得到,就会出错。内存交互操作 内存交互操作有8原创 2021-12-29 13:11:40 · 277 阅读 · 1 评论 -
JUC(7)四大函数式接口
文章目录1、四大函数式接口(必须掌握)1.1 function1.2 Predicate1.3 Consumer1.4 Supplier1、四大函数式接口(必须掌握)1、lambda表达式2、函数式接口3、链式编程4、stream流式计算函数式接口:只有一个方法的接口@FunctionalInterfacepublic interface Runnable { public abstract void run();}超级多的FunctionalInterface简化编程原创 2021-12-28 22:14:10 · 139 阅读 · 1 评论 -
JUI(6)线程池
文章目录1、SynchronousQueue2、线程池(重点)2.1 使用单例2.2、使用固定大小的线程2.3、缓存线程池2.4 七大参数1、SynchronousQueuepackage com.blockingqueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.SynchronousQueue;import java.util.concurrent.TimeUnit;/** * 同步队原创 2021-12-28 20:54:45 · 325 阅读 · 2 评论 -
JUC(5)BlockingQueue四组API
1、读写锁ReadWriteLockpackage 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原创 2021-12-28 17:06:26 · 374 阅读 · 1 评论 -
JUC(4)Callable和常用的辅助类
1、Callable1、可以有返回值2、可以抛出异常3、方法不同、run()/call()future Task细节:1、有缓存2、结果可能需要等待,会阻塞2、常用的辅助类原创 2021-12-28 14:40:38 · 120 阅读 · 1 评论 -
JUC(2)使用condition实现精准通知唤醒
package com.orderPC;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 执行A,然后B,然后C,然后A */public class ProductC { public static void main(String[] args) {原创 2021-12-26 23:16:42 · 462 阅读 · 1 评论 -
java中获取当前执行线程的名称
Thread.currentThread().getName()原创 2021-12-26 22:50:49 · 1888 阅读 · 1 评论 -
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
1、线程和进程进程:一个程序,微信、qq、、、程序的集合。(一个进程包含多个线程,至少包含一个线程。java默认有两个线程:主线程(main)、垃圾回收线程(GC)线程:runnable、thread 、callablejava开不了线程,在源码中可以看出,调用的是底层的方法 private native void start0();2、并发和并行并发:交替并行:同时(同一个时间)并发编程的本质:充分利用cpu的资源3、线程的状态看源码 public enum St.原创 2021-12-26 22:25:21 · 123 阅读 · 2 评论 -
并发编程之生产者和消费者问题
简单的线程通信,一个线程对数字进行增加操作、另一个线程对线程进行减少操作。简单解释:线程A对数字进行减少操作,但不会一直让这个数字减少下去。当减少到设定的条件,让其等待,通知其他线程获得该资源。package com.ProductAndCustomer;/** * 线程之间的通信,生产者和消费者问题 */public class Product { public static void main(String[] args) { Data data = new Dat原创 2021-12-26 17:39:02 · 535 阅读 · 1 评论 -
并发编程之买票问题
这里使用ambda表达式(参数)->{代码}首先是没有锁的情况下多个线程争夺同一个资源的情况package com.zheng;//线程就是一个单独的资源类public class BuyTicket { public static void main(String[] args) { Ticket ticket = new Ticket(); //并发:多线程操作同一个资源类,把资源类丢入线程 //lambda表达式(参数)->原创 2021-12-26 16:54:34 · 475 阅读 · 1 评论