JUC并发编程
文章平均质量分 83
小样x
硕士毕业已工作,论文指导、课程设计指导、校招面试、系统部署等均可私信或表明原因留联系方式,用心指导
展开
-
线程生命周期与创建线程的多种方式
多线程的四种实现方式原创 2021-09-14 12:12:08 · 5226 阅读 · 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 · 133 阅读 · 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 · 95 阅读 · 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 · 174 阅读 · 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 · 128 阅读 · 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 · 144 阅读 · 0 评论 -
JUC并发编程(8)--- ForkJoin与Stream并行流
一、FoekJoinForkJoin是在JDK1.7出来的,在大数据环境下,并行执行任务,提高效率。原理:用的是分支合并的思想,将大任务拆成多个小任务并行,然后再合并成原来任务ForkJoin的特点:工作窃取假设有线程A和线程B同时执行队列中的任务,线程B先执行完,然后线程B不能闲着,就会窃取A,后面没有执行完的来执行,这样就提高效率。就是自己执行完,帮别人执行。我们来举个求和案例,在IDEA中使用ForkJoinpackage com.yx.ForkJoin;import java.u原创 2021-05-03 09:01:45 · 270 阅读 · 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 · 299 阅读 · 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 · 152 阅读 · 2 评论 -
JUC并发编程(5)--- 四个常用类
目录前言一、CountDownLatch二、CyclicBarrier三、Semaphore四、ReadWriteLock读写锁前言四个常用类CountDownLatch—减法计数器CyclicBarrier—参数达到就执行Runnable接口实现Semaphore—并发限流ReadWriteLock—读写锁别急,现在分别用例子解释这四个类的用法一、CountDownLatch两个重要方法:countDown()和await()这是一仿最后一个放学的同学关门案例,CountDownLat原创 2021-05-01 11:58:02 · 123 阅读 · 0 评论 -
JUC并发编程(4)--- 集合类不安全问题
前言集合不安全,主要是List、Set和Map中的一些类,我们分情况说一说,并提出如果变安全,即解决不安全问题一、Collection的子接口ListList中的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 · 98 阅读 · 1 评论 -
JUC并发编程(3)---八锁现象,让你彻底理解锁
前言我们都知道,只要有并发,就必然要锁来保证线程安全,那什么是锁呢?这里将举8个例子,对应锁的8个问题,让你彻底搞懂锁的运用八锁现象一、synchronized锁的对象是方法的调用者上面标题是先抛出的结论,我们一步步来得到这个结论案例:电话类,有打电话和发短信两个功能,两个线程分别执行发短信和打电话,我们看下面代码,是先打印发短信还是先打印打电话?注:代码中TimeUnit.SECONDS.sleep(1),这是JUC包中的睡眠方法,类似于多线程中的Thread.sleep(1000)pack原创 2021-04-30 10:03:01 · 148 阅读 · 0 评论 -
JUC并发编程(2)---生产者与消费者问题(java)
前言生产者与消费者问题是经典的线程通信问题,也是面试常考的手撕题,那什么是生产者与消费者问题呢?答:生产者我们可以想象成一只母鸡,鸡会下蛋,所以是生产者。而人会吃蛋,所以人是消费者,鸡下完蛋后会咯咯咯的叫,就像通知人快来拿鸡蛋一样,生产者也会通知消费者,只不过这里生产者和消费者都是针对线程。内容一、Synchronized版的生产者与消费者需求:现在有两个线程,线程A和线程B,要线程A和线程B交替执行,操作同一个变量num,线程A执行时num+1,线程B执行时num-1,就像鸡和人一样,生产和消费原创 2021-04-29 23:24:54 · 198 阅读 · 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 · 189 阅读 · 1 评论