JUC学习笔记(持续更新)

学习《Java并发编程》目录索引 (持续更新中)      写在前面:此系列为本人学习黑马《Java并发编程》所整理的笔记 ! 不局限于应用层开发, 更加深入理解多线程, 并发编程, 更有利于我们长久发展 ! 学习Java并发编程 阅读详情
1、什么是JUC

官方+源码

java.util.concurrent : 
java.util.concurrent.atomic : 
java.util.concurrent.locks : 
2、线程和进程

线程、进程一句话讲解

​ 进程: 一个程序,一个进程可包含多个线程,至少包含一个。

​ 线程:操作系统能够进行运算调度的最小单位,被包含在进程之中。

​ java真的能开线程吗? -->不能 只能调用C++的本地方法,java无法直接操作硬件。

并行、并发

​ 并发:多个线程操作一个资源

			* ​		CPU单核,模拟出多条线程。

​ 并行:只有多核CPU才能产生并行效果。

  • ​ CPU多核,多线程可同时执行。

    CPU密集型   IO密集型
    //获取CPU的核数
    Runtime.getRuntime().availableProcessors();
    

    线程的状态

NEW 新生
RUNNABLE 运行
BLOCKED 阻塞
WAITING 等待,死等
TIMED_WAITING 超时等待
TERMINATED 终止

wait / sleep的区别

1、所属类不同: 
	wait => Object   sleep => Thread
2、关于锁的释放:
	wait会释放锁,sleep不会释放锁
3、使用范围不同:
	wait必须在同步代码块中; sleep可以在任何位置使用。
4、捕获异常不同

TimeUnit.**休眠方式与sleep的区别?

3、Lock锁

传统锁:synchronized

​ 1、synchronized是java的内置关键字,适合少量的代码同步问题;

​ 2、无法判断获取锁的状态;

​ 3、会自动释放锁,当锁定时,后面线程会傻傻等待。

​ 4、可重入锁,不能中断,属于非公平锁。

Lock锁

​ 1、Lock是java类,适合大量的代码同步;

​ 2、可以判断是否获取到锁;

​ 3、lock必须手动释放锁,不然会造成死锁;

​ 4、当一个线程锁定后,其他线程不一定会继续等待。

​ 5、可重入锁,可以判断锁,属于非公平锁,可以自己设置。

Lock实现方式:

Lock l = new ReentrantLock();  //可重入锁
l.lock(); #加锁
l.tryLock();#尝试获取锁
l.unlock();#解锁

ConcurrentHashMap

countDownLatch #减法计数器

cyclicBarrier #加法计数器

semaphore #信号量 停车位案例

4、BlockingQueue

SynchronousQueue #同步队列 FIFO

5、线程池(重点)

池化技术

程序的运行本质:占用系统资源,优化资源的使用=》池化技术

(线程池、连接池、内存池、对象池)

线程池的好处

1、降低资源的消耗
2、提高响应的速度
3、方便管理:线程复用、可以控制最大并发数、管理线程

3大方法、4种拒绝策略、7个参数

3大方法:
	1、Executors.newSingleThreadExecutor() //单个线程
	2、Executors.newFixedThreadPool(5) //固定线程池
	3、Executors.newCachedThreadPool() //可伸展的线程池
//7个参数:
/**
*int corePoolSize 核心线程池大小
*int maximumPoolSize 最大核心线程池大小
*long keepAliveTime 超时时间
*TimeUnit unit  超时时间单位
*BlockingQueue<Runnable> workQueue  阻塞队列
*ThreadFactory threadFactory  线程工厂,创建线程的,一般不动
*RejectedExecutionHandler handler 拒绝策略
*/
    public static ExecutorService new SingleThreadExecutor(){
    	return new FinalizableDelegatedExecutorService(
            new ThreadPoolExecutor(1,1/Integer.MAX_VALUE,0L,
                                   TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>()) );
}

4大函数式

lambda表达式 、 链式编程、 函数式接口、 Stream流式计算
6、Stream流式计算
List.stream.filter(u->{return u.getAge()%2==0;})  //断定接口 年龄是2的倍数
    .map(u->{return u.getName().toUpperCase();}) //名字转大写
    .corted((u1,u2)->{u2.compareTo(u1);}) //排序
    .limit(1)  //分页
   	.forEach(system.out::println)
    
7、ForkJoin

特点:工作窃取 (双端队列)
在这里插入图片描述

操作:求和计算

​

JUC高并发编程从入门到精通(全) 目录前言 前言 在了解这部分内容的时候 先要了解java的一些基础内容 java零基础从入门到精通(全) javaSE从入门到精通(全) 所谓JUC是java.util .concurrent 工具包的简称这是一个处理线程的工具包可以实现多线程高并发的内容 了解该部分内容先了解线程与进程的相关概念 【操作系统】线程与进程的深入剖析(全) java之Thread类详细分析(全) 以及涉及到的lambda表达式函数的概念 java中lambda表达式 ...... 阅读详情

相关推荐

从SVF文件到高效验证:Formality中set_svf命令的隐藏技巧与实战解析

本文深入解析Formality中set_svf命令的高级应用技巧,涵盖SVF文件生成策略、多文件加载优化及验证效率提升方法。通过-append和-ordered选项的实战应用,帮助工程师解决芯片验证中的常见问题,实现验证通过率与运行效率的双重提升。

mqtt6iot的博客 820

JUC总结详细笔记

1、juc是什么 java.util.concurrent在并发编程中使用的工具类 2、进程和线程 (1)进程/线程是什么 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 线程:通常在一个进程中可以包含至少一个线程。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥

最初的模样 1248

车辆贷款违约预测挑战赛

2021科大讯飞-车辆贷款违约预测挑战赛--方案简介车贷违约预测问题,目的是建立风险识别模型来预测可能违约的借款人。预测结果为借款人是否可能违约,属于二分类问题。偏数据挖掘的比赛,关键点是如何基于对数据的理解抽象归纳出有用的特征。站在大佬的视角,尝试学习总结,站在巨人的肩膀上,也许看得会更远一些。直接进入主题,开始学习套路,芜湖~特征工程1、常用库、数据导入import pandas as pd import numpy as np import lightgbm as lgb import xgboost

平平淡淡,戒急用忍,一生学闭嘴。 3341

【JUC基础学习笔记】

JUC基础学习笔记一、JUC概述1. JUC是什么2. 进程与线程3. 并发与并行4. sleep() 和 wait()等方法二、Lock1. Synchronized2. Lock接口与方法3. 两者异同4. Lock接口重要实现类三、线程通信 / 线程同步1. Synchronized同步块2. Lock锁四、线程安全1. 阻塞同步2. 非阻塞同步3. 非同步五、集合的线程安全1. 并发集合 ArrayList2. Vector3. Collections4. JUC.CopyOnWriteList..

sixteen_16的博客 1万+

Feko仿真GPS微带天线学习笔记

为了优化方便,使参数变量化,所以定义几个变量在CADFEKO左侧浏览器中如图所示定义变量,如下表贴片的尺寸切角尺寸feed =-6.4馈电点距坐标原点的距离sub_w=45基板的宽度sub_d=45基板的长度sub_h=5基板的高度epsR=5.6介电常数损耗角正切。

qq_36521926的博客 3992

人工智能发展史(从起步到磅礴)以及浪潮阶段

随机森林是将多个有差异的弱学习器(决策树)Bagging并行组合,通过建立多个的拟合较好且有差异模型去组合决策,以优化泛化性能的一种集成学习方法。从论文里可以了解到,GPT-1具有1.17个参数,采用了12层的Transformer 解码器结构,使用5GB的无标注文本数据,在8个GPU上训练了一个月,然后再进行人工监督的微调。训练相结合的理念(该方法在当时计算力上还是有很多挑战,基本上都是和链式求导的梯度算法相关的),这也解决了单层感知器不能做非线性分类的问题,开启了神经网络新一轮的高潮。

xiao77224li的博客 7506

JUC笔记整理(持续更新)

JUC 1. 线程的创建和使用 1.1 继承Thread类 /** * 多线程的创建 方式一: * 1. 继承Thread类 * 2. 重写Thread类run()方法 ---> 将此线程执行的操作声明在run()方法中 * 3. 创建Thread子类的对象 * 4. 通过对象调用start()方法 * * 例子:遍历100以内的偶数 * */ public class JavaTest01 extends Thread { @Override publi

m0_46376464的博客 185

UVM环境复位--stop_sequences()

在UVM验证环境中, stop_sequences是一个用于强制终止所有正在运行的 Sequence 的方法,通常用于动态控制激励生成流程。1.通过uvm_config_db传递事件和严格的同步机制,此方案符适用于复杂复位场景和动态测试控制。组件耦合:Driver 和 Sequence 不再直接依赖env,通过标准接口通信。竞争条件:确保 Driver 完成清理后再终止 Sequence。代码健壮性:使用非阻塞操作和事件监听,避免死锁。

qq_42779035的博客 3016

JUC底层的详细学习+狂神JUC笔记+全网最全

1、什么是JUC 源码+官方文档 JUC是 java util concurrent 面试高频问JUC~! java.util 是Java的一个工具包~ 业务:普通的线程代码 Thread Runnable: 没有返回值、效率相比于Callable 相对较低! 2、线程和进程 进程:一个程序,QQ.EXE Music.EXE;数据+代码+pcb 一个进程可以包含多个线程,至少包含一个线程! Java默认有几个线程?2个线程! main线程、GC线程 线程:开了一个进程Typora,写字,等待几分钟会进行

qq_41617848的博客 2万+

【TensorRT】TensorRT C# API 项目介绍:基于C#与TensorRT部署深度学习模型(上篇)

开发了TensorRT C# API 2.0版本,该版本在开发时充分考虑了上一版本应用时出现的问题,并进行了改进。同时在本版本中,我们对接口进行了优化,使用起来更加简单,并同时提供了相关的应用案例,方便开发者进行使用。

grape_yan的博客 3039

YOLO格式数据集划分

YOLO格式的数据集划分 标题标签格式txt import os import cv2 import random from PIL import Image # os.makedirs('labels_train') # os.makedirs('labels_val') img_train_path ='./img_train/' #图片训练集保存路径 img_val_path = './img_val/' #图片验证集保存路径 labels_train_path = './labels_t

weixin_51154380的博客 3308

JUC学习笔记

JUC主要是java8下的三个包 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks java.util.concurrent.function 进程和线程 进程:一个程序,程序的集合 一个进程往往包含多个线程,至少包含一个 java默认有两个线程:main gc 线程:正在运行的程序,不如音乐播放器 java是开不了线程的,调用底层的c++调用的方法 并发编程:并发,并行 并

市民景先生 1671

OCR文字识别基础

ocr文字识别

m0_47405013的博客 1755

Java面试复习体系总结(2021版,持续更新)

Java面试复习体系总结(2021版) 一、Java基础 内容 Java基础(一):Java集合框架(超详细解析,看完面试不再怕) Java基础(二):迭代器(Iterator)(含使用方法详解) Java基础 (三):LinkedList(含使用方法详解) Java基础(四):ArrayList(含使用方法详解) Java基础(五):HashSet(使用方法详解) Java基础(六):HashMap(使用方法详解) Java基础(七):栈 Stack(使用方法详解)

Viper的程序员修炼手册 11万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JUC学习笔记及拓展

JUC学习笔记及拓展Java JUC1 Java JUC简介2 volatile 关键字-内存可见性2.1 内存可见性2.2 volatile 关键字3 原子变量与CAS算法3.1 原子变量3.1.1 i++的原子性问题3.1.2 原子变量3.2 CAS算法3.2.1 ABA问题3.2.2 CAS在JAVA中底层的实现3.3 原子性与可见性区别4 ConcurrentHashMap4.1 锁粒度4.2 锁分段4.3 其它4.4 写入并复制5 CountDownLatch(闭锁)5.1 概念5.2 方法介绍6

yZzc_XQ的博客 3925

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【JUC】——JUC相关知识点,不断更新

前言 作为并发的基础,我们需要熟悉掌握JUC相关的知识,才能更好的在实际项目中运用 在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类, 用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中 的 Collection 实现等; 以下为他人总结的JUC下常用类:...

我爱吃土豆 6162

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java经典面试题JUC并发篇(持续更新)

什么是ABA:在CAS过程中,线程1、线程2分别从内存中拿到了当前值为A,同时线程2把当前值A改为B,随后又把B改回来变为A,此后线程1检查到当前值仍为A而导致执行cas成功,但这个过程却发生了ABA问题,现场资源可能和当初不一样了(线程2把当前值由A->B->A)解决方法:版本号机制,利用版本号标记线程1拿到的‘当前值’的版本,若线程2进行了A->B->A操作,则版本号会改变,那线程1再次拿到的‘当前值’的版本和第一次的肯定是不同的,从而判定cas失败;解释器JIT对热点代码的优化。

欢迎来到烟火气知识小天地!这里记录生活、工作中的 “小麻烦”,从软件故障到生活难题,我会毫无保留分享解决思路与方法,愿成为你排忧解难时的温暖参考,伴你在解决问题路上稳步前行。 5502

【JUC编程】JUC 多线程基础全面解析(速食版,25年后更新专栏)

线程是 CPU 调度的最小单元。一个线程是一个独立的执行路径,可以与其他线程共享进程内的资源。JUC 是 Java 提供的一套强大的并发工具,它简化了多线程编程的复杂性,同时提供了高效、安全的解决方案。通过合理使用线程池、锁机制、并发集合以及线程通信工具,我们可以更高效地开发并发程序。在实际开发中,应根据具体场景选择合适的工具,以保证性能与安全性。总是学不会.

学不会就接着学 1601

JUC并发编程最新面试题(持续更新)

多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。多线程的好处: 可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;多线程需要协调和管理,所以需要 CPU 时间跟踪线程;线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问 题。

个人笔记git:https://gitee.com/tlangp/note.git 1340

什么是JUC?

什么是JUC?

m0_61787196的博客 1783

Java并发编程(JUC)知识详解(持续更新)

Java底层会调用pthread_create来创建线程,所以本质上Java程序创建的线程就是个操作系统上的线程一样的。

m0_74362844的博客 699

JUC系列(一)什么是JUC?

多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!! 沉下去,再浮上来,我想我们会变的不一样的。 先看张图,舒缓下心情,再继续吧 一、JUC简介 JUC实际上就是我们对于jdk中java.util .concurrent 工具包的简称。这个包下都是Java处理线程相关的类,自jdk1.5后出现。 二、进程与线程 2.1、进程 概述: 进程(Process) 是计算机中的程序关于某数据集合上的一.

北 3664

Java JUC学习笔记 day01

文章目录Java JUC学习笔记1. Java JUC 简介2. volatile 关键字-内存可见性2.1 内存可见性2.1.1 示例2.2 volatile 关键字3. 原子变量-CAS算法3.1 CAS 算法3.2 原子变量3.3 原子性问题示例3.4 使用CAS解决问题3.5 模拟CAS算法4. ConcurrentHashMap 锁分段机制4.1 ConcurrentHashMap4.2 CountDownLatch 闭锁5. 实现 Callable 接口5.1 Callable 接口6. Loc

Alu_em的博客 471

JUC概述

JUC是什么? JUC就是java.util.concurrent,java.util.concurrent.atomic和java.util.concurrent.locks三个工具类包,它们是处理线程的工具包,最开始出现是从JDK 1.5开始出现。(JUC就是java.util.concurrent工具类的首字母,简称JUC) JUC的三大部分 JUC包括三大部分:Sychronized,Lock,线程池三大部分。 ...

是小D吖!的博客 2882
上一篇: Redis学习笔记
下一篇: 记RestTemplate 添加了@LoadBalanced为什么不能使用ip调用接口
渣成沙
博客等级 码龄11年 36粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值