![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 83
小样x
硕士毕业已工作,论文指导、定制开发、课程设计指导、系统部署、项目讲解等均可私信或私信留联系方式,用心指导
展开
-
线程生命周期与创建线程的多种方式
多线程的四种实现方式原创 2021-09-14 12:12:08 · 5251 阅读 · 0 评论 -
JUC并发编程(13)--- 彻底玩转单例模式
前言 本文将一步步带你实现一个安全的单例(枚举) 单例模式 1、饿汉式单例 饿汉式就是一上来就加载,一上来就new这个类对象,对应内存空间也会一上来就分配,但是没有被使用,这样就浪费了空间,所以不用饿汉式 //饿汉式单例 public class Hungry { //假设下面为4组内存资源,但一上来就加载,并没有使用,就浪费了空间 private byte[] data1 = new byte[1024*1024]; private byte[] data2 = new byte原创 2021-05-14 17:58:46 · 142 阅读 · 2 评论 -
JUC并发编程(12)--- 悲观锁和乐观锁
前言 悲观锁和乐观锁都是一种设计思想 一、悲观锁 介绍 悲观锁总是很悲观、多疑,它在操作数据时总会认为别人会同时修改数据。每次拿数据的时候总是会给数据上锁。因此操作数据时会直接把数据锁住,直到操作完成才释放锁。常见用了悲观锁设计思想的有synchronized和ReetrantLock,这两个锁总是会给要执行的线程上锁。 使用场景 select status from goods where id=1 for update; 数据库中执行查询操作,从goods表中查询id=1对应记录的status,与普通原创 2021-05-04 20:48:47 · 138 阅读 · 0 评论 -
JUC并发编程总结复盘
一、JUC并发编程进阶内容 JUC并发编程进阶内容一共写了11篇文章 https://blog.csdn.net/weixin_39615182/category_11026112.html 二、回顾(复盘) 第一篇:Synchronized和Lock区别 归纳:主要是说Synchronized和Lock都可以上锁,从而保证线程安全,但是要比较一下二者。Synchronized关键字修饰的,对应多个线程必须依次执行,如其他线程必须等待当前正在执行的线程执行完才能执行。这样执行效率不高,并且如果线程A阻塞,那原创 2021-05-04 11:00:13 · 99 阅读 · 1 评论 -
JUC并发编程(11)--- 深入理解CAS
一、初识CAS 什么是CAS? CAS就是compareAndSet的缩写,意思是如果我期望(except)的值达到了就更新,否则就不更新,并且CAS是CPU的并发原语!执行效率非常高。 //CAS,compareAndSet:比较并交换 public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(2020);原创 2021-05-03 22:10:05 · 180 阅读 · 1 评论 -
JUC并发编程(10)--- 谈谈对Volatile的理解
前言 什么是Volatile? 答:Volatile是Java虚拟机提供的轻量级同步机制 Volatile的三大特性: 1、保证可见性 2、不保证原子性 3、禁止指令重排 一、保证可见性 讲可见性就不得不提JMM,我们先来了解什么是JMM? JMM:java内存模型,就是一个约定、规范,实际不存在。 关于JMM的一些同步约定 1、线程加锁前,必须读取主内存中的最新值到工作内存中 2、线程解锁前,必须把共享变量立刻刷回主存 3、加锁和解锁是同一把锁 我通过线程运行机制了解它 图中8种操作即线程运行的8种操作原创 2021-05-03 17:33:09 · 130 阅读 · 1 评论 -
JUC并发编程(9)--- 一些锁的理解
1、公平锁、非公平锁 公平锁:非常公平,不能插队,先来后到 非公平锁(默认):非常不公平,可以插队 比如:有一个线程需要3s执行结束,另一个3h执行结束,但3h先到。那么对于公平锁,3s必须等3h执行完毕,而对于非公平锁就可以让3s先插队执行。 如上,默认都是非公平,synchronized 和Lock都是默认非公平 2、可重入锁 可重入锁又称递归锁 假设我们进自己家需要一把大门锁,然后拿到大门锁,自然就可以进房间里面 代码演示一下 package com.yx.lock; public class原创 2021-05-03 14:58:27 · 150 阅读 · 0 评论 -
JUC并发编程(8)--- ForkJoin与Stream并行流
一、FoekJoin ForkJoin是在JDK1.7出来的,在大数据环境下,并行执行任务,提高效率。 原理:用的是分支合并的思想,将大任务拆成多个小任务并行,然后再合并成原来任务 ForkJoin的特点:工作窃取 假设有线程A和线程B同时执行队列中的任务,线程B先执行完,然后线程B不能闲着,就会窃取A,后面没有执行完的来执行,这样就提高效率。就是自己执行完,帮别人执行。 我们来举个求和案例,在IDEA中使用ForkJoin package com.yx.ForkJoin; import java.u原创 2021-05-03 09:01:45 · 280 阅读 · 0 评论 -
JUC并发编程(7)---线程池画图详解
目录一、什么是线程池?二、3个方法三、7大参数四、4种拒绝策略4.1 AbortPolicy4.2 CallerRunsPolicy4.3 DiscardPolicy4.4 DiscardOldestPolicy附加思考:maxinumPoolSize如何确定1、CPU密集型2、IO密集型 一、什么是线程池? 说线程池就要先说池化技术:在面向对象编程中,由于创建和销毁对象是十分消耗资源的,所以我们要尽可能减少创建和销毁的次数,池化技术是线程池的核心,就是事先创建若干个可执行的线程放入一个池中,需要的时候就从原创 2021-05-01 17:03:04 · 313 阅读 · 1 评论 -
JUC并发编程(6)--- 阻塞队列和同步队列使用
前言 主要涉及一些方法,根据开发实际情况,选择用哪个方法 一、阻塞队列 抛出异常 add与remove,设置队列大小为3,已经添加3个再添加就会抛出异常,remove同理,如果队列没有还remove就会抛出异常java.util.NoSuchElementException 但如果我们不要抛出异常呢,就可以用有返回值的,不能添加就返回false,不抛异常 package com.yx.queue; import java.util.concurrent.ArrayBlockingQueue; pub原创 2021-05-01 13:32:43 · 157 阅读 · 2 评论 -
JUC并发编程(5)--- 四个常用类
目录前言一、CountDownLatch二、CyclicBarrier三、Semaphore四、ReadWriteLock读写锁 前言 四个常用类 CountDownLatch—减法计数器 CyclicBarrier—参数达到就执行Runnable接口实现 Semaphore—并发限流 ReadWriteLock—读写锁 别急,现在分别用例子解释这四个类的用法 一、CountDownLatch 两个重要方法:countDown()和await() 这是一仿最后一个放学的同学关门案例,CountDownLat原创 2021-05-01 11:58:02 · 127 阅读 · 0 评论 -
JUC并发编程(4)--- 集合类不安全问题
前言 集合不安全,主要是List、Set和Map中的一些类,我们分情况说一说,并提出如果变安全,即解决不安全问题 一、Collection的子接口List List中的ArrayList在并发环境下不安全,如下代码测试 package com.yx.collection; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class ListTest { public static v原创 2021-04-30 15:18:52 · 102 阅读 · 1 评论 -
JUC并发编程(3)---八锁现象,让你彻底理解锁
前言 我们都知道,只要有并发,就必然要锁来保证线程安全,那什么是锁呢?这里将举8个例子,对应锁的8个问题,让你彻底搞懂锁的运用 八锁现象 一、synchronized锁的对象是方法的调用者 上面标题是先抛出的结论,我们一步步来得到这个结论 案例:电话类,有打电话和发短信两个功能,两个线程分别执行发短信和打电话,我们看下面代码,是先打印发短信还是先打印打电话? 注:代码中TimeUnit.SECONDS.sleep(1),这是JUC包中的睡眠方法,类似于多线程中的Thread.sleep(1000) pack原创 2021-04-30 10:03:01 · 153 阅读 · 0 评论 -
JUC并发编程(2)---生产者与消费者问题(java)
前言 生产者与消费者问题是经典的线程通信问题,也是面试常考的手撕题,那什么是生产者与消费者问题呢? 答:生产者我们可以想象成一只母鸡,鸡会下蛋,所以是生产者。而人会吃蛋,所以人是消费者,鸡下完蛋后会咯咯咯的叫,就像通知人快来拿鸡蛋一样,生产者也会通知消费者,只不过这里生产者和消费者都是针对线程。 内容 一、Synchronized版的生产者与消费者 需求:现在有两个线程,线程A和线程B,要线程A和线程B交替执行,操作同一个变量num,线程A执行时num+1,线程B执行时num-1,就像鸡和人一样,生产和消费原创 2021-04-29 23:24:54 · 217 阅读 · 1 评论 -
JUC并发编程(1)---Synchronized和Lock区别
目录准备工作内容一、不涉及Synchronized和Lock的情况二、加上Synchronized三、Lock 准备工作 首先要确定自己是java8以上,不然juc和lambda表达式可能都无法使用 内容 先说一个问题来引入Synchronized和Lock,我们以一个经典买票案例说明,首先有A,B,C三个卖票窗口进行卖票。 一、不涉及Synchronized和Lock的情况 一开始使用普通多线程,不涉及Synchronized和Lock的情况,我们来看看代码执行效果 package com.yx.de原创 2021-04-29 20:24:19 · 194 阅读 · 1 评论