![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 60
Been Doing
君子尚拙,以璞为真!
展开
-
JUC并发编程脑图拿走
JUC 思维导图这是整理的一些 JUC 并发编程的脑图,里面包括:理论基础,线程基础,工具类,并发的本质,并发与模式等,还有一些链接可以直接点入,进行查看。 https://naotu.baidu.com/file/e7af5034f65c1e2ced0e4e331a3803da?token=4865b4f6087d0cd4&qq-pf-to=pcqq.group...原创 2022-04-04 15:38:35 · 570 阅读 · 0 评论 -
各锁的理解
1:公平锁,非公平锁;公平锁:非常的公平,不能够插队,必须先来厚道。非公平锁:非常的不公平,可以插队,(默认都是非公平的)查看底层ReentrantLock 的底层实现,可以自己设置公平锁,和非公平锁;我们可以看到 ReentrantLock 有一个参数是bollean ,是指为 true 表示获得了公平锁;默认的非公平锁;public ReentrantLock() { sync = new NonfairSync();}//可以自己设置;public ReentrantLock原创 2022-04-03 09:42:48 · 147 阅读 · 0 评论 -
深入理解CAS
深入理解CSA锁机制存在以下问题jdk5之前,我们知道,在多线程编程的时候,为了保证多个线程对一个对象同时进行访问时,我们需要加同步锁synchronized,保证对象的在使用时的正确性,但是加锁的机制会导致如下几个问题(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能原创 2022-04-02 21:08:02 · 452 阅读 · 0 评论 -
Wait和Sleep的区别
Wait和Sleep的区别先说结果: wait 方法会释放对象锁,但 sleep 方法不会。代码实现:wait:package com.baidu.demo01;public class WaitDemo { private static Object locker = new Object(); public static void main(String[] args) throws InterruptedException { WaitDemo waitD原创 2022-04-01 16:24:31 · 251 阅读 · 0 评论 -
Callable
Callable实现线程的方式主要有三种方式;1;继承Thread;2:实现Runnable 接口;3:线程Callable 接口ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1:可以有返回值2:可以抛出异常3:方法不同 Runnable的方法是run方法,Callable的方法是call方法;代码测试:package com.baidu.Callable;import原创 2022-04-01 15:34:34 · 106 阅读 · 0 评论 -
彻底玩转单例模式
彻底玩转单例模式饿汉式。DCL懒汉式,深究单例模式!1:饿汉式:package com.baidu.single;//饿汉式单例public class Hungry { //一上来就加载对象; //可能会浪费空间; private byte[] bytes1 = new byte[1024 * 1024]; private byte[] bytes2 = new byte[1024 * 1024]; private byte[] bytes3 = ne原创 2022-03-31 20:58:30 · 307 阅读 · 0 评论 -
Volatile
Volatile并发编程中的三个概念1:保持可见性package com.baidu.tVolatile;import org.omg.CORBA.TIMEOUT;import java.util.concurrent.TimeUnit;public class JMMDemo { //不加volatile 会发生死循环 //加volatile 可以保持可见性 private static volatile int num = 0; public sta原创 2022-03-31 20:48:20 · 553 阅读 · 0 评论 -
JMM(java 内存模型)
JMM(java 内存模型)深入理解:https://www.pdai.tech/md/java/jvm/java-jvm-x-introduce.html#jmm%E5%BC%95%E5%85%A5请你谈谈对Volatile的理解Volatile是Java虚拟机提供轻量级的同步机制;1:保证可见性;2:不保证原子性3:禁止指令重排什么是JMMJMM:定义了一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种原创 2022-03-31 20:19:00 · 315 阅读 · 0 评论 -
四大函数式接口(重点)
四大函数式接口(重点)lambda表达式,链式编程,函数型接口,Stream流式计算1:函数时接口;package com.baidu.function;import java.util.function.Function;/** * Function 是一个函数时接口,有一个输入参数,就有一个输出参数。 * 只要是函数时接口,就可以用lambda 表达式; */public class Demo01 { public static void main(String[] a原创 2022-03-30 20:17:37 · 2768 阅读 · 0 评论 -
线程池(三七四)
线程池线程池:三大方法。七大参数。4种拒绝策略池化技术;程序的运行,是占用系统的资源的! 优化资源的使用,===>池化技术;线程池,连接池,内存池,对象池…创建 ,销毁,十分的浪费资源。。 池化技术:事先准备好一些资源,有人要用,就在这里来拿,用完之后还给我。线程池的好处:1:降低资源的消耗。2:提高响应的速率。3:方便管理。线程的复用,可以控制最大的并发量,管理线程;三大方法://ExecutorService threadPool = Executors.newSingl原创 2022-03-30 20:12:55 · 196 阅读 · 0 评论 -
阻塞队列BlockingQueue (BlockingQueue)
阻塞队列BlockingQueue (BlockingQueue)什么情况下我们会使用阻塞队列:多线程并发处理。线程池;学会使用队列;添加,移除1:抛出异常 /** * 1:抛出异常 */ public static void test1(){ //队列的大小 ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3); System.原创 2022-03-30 20:01:39 · 600 阅读 · 0 评论 -
ReentrantReadWriteLock (ReadWriteLock)
ReentrantReadWriteLock (ReadWriteLock)加读写锁;是为了多条线程可以同时读取,写的时候只能允许只有一条线程进行写入操作。package com.baidu.ReadWriteLock;import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.Reentrant原创 2022-03-30 19:57:14 · 93 阅读 · 0 评论 -
JUC种常用的辅助类
常用的辅助类在JUC并发编程里面,有一个常用的辅助类;java.util.concurrent 包下的;1:CountDownLatch这是一个一次性的现象 - 计数无法重置。package com.baidu.add;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo { //相当与我们的减法操作 public static void main(String[] arg原创 2022-03-30 19:53:30 · 725 阅读 · 0 评论 -
集合类不安全(unSale)
集合类不安全(unSale)1:List不安全package com.baidu.unSale;import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;/*java.util.ConcurrentModificationException 并发修改异常 */public class ListTest { public static void main(String[] args) {原创 2022-03-30 13:48:31 · 383 阅读 · 0 评论 -
8种锁现象
8锁现象synchronized锁定的到底是什么?https://www.zhihu.com/question/57794716如何判断锁的是谁;永远知道他是什么锁,锁到底锁的是谁。深刻理解我们的锁1:标准情况下,两个方法,同时加锁,一个对象;2: 给延迟时间,看哪一个先执行package com.baidu.Lock8;/** * 关于所得8个问题 * 1:标准情况下,答:1、发短息 2、打电话 * 2:给sendSms延迟4 秒执行,答:1、发短息 2、打电话 */impo原创 2022-03-29 22:39:18 · 315 阅读 · 0 评论 -
JUC并发编程
JUC并发编程1:什么是JUCjava.util.concurrent在并发编程中使用的工具类业务:普通的线程代码 ThreadRunnable 没有返回值、效率相比于Callable相对较低2:线程和进程1:线程和进程进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程原创 2022-03-28 20:17:16 · 2421 阅读 · 0 评论