Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)

news2024/11/23 7:46:22

1.进程与线程定义

进程包含线程,如一个百度网盘进程,该进程的线程可以有上传,下载。

image-20231208121104691

image-20231207200805774

image-20231207200832796

image-20231207205002628

2.创建线程的三种方式

方式1-继承Thread类

image-20231207204839561

image-20231207204750807

方式2-实现Runnabled接口

image-20231207205315366

1.常规写法

image-20231207205252994

image-20231207205548256

2.匿名内部类写法

image-20231207205417435

方式3-实现Callable接口

image-20231207205638691

image-20231207205747187

image-20231207210349671

示例代码:

image-20231207210052881

f1.get()方法得到call方法的返回值

image-20231207210146651

也就是说当线程执行完后,get()方法才执行,这样才能得到线程执行完后的返回值。

3.Thread的常用方法

image-20231207210613001

示例代码:

1.getName()方法获取线程名称

image-20231207210828069

2.setName(字符串)方法为线程取名

image-20231207210925649

3.构造器super(name)方法为线程取名

image-20231207211047525

4.sleep(毫秒值)线程睡眠

image-20231207211156051

5.join()让当前该线程先执行完,其他线程再执行

image-20231207211342582

image-20231207211616298


4.认识线程安全

image-20231207211700529

image-20231207211724786

5.线程同步(解决线程安全问题)

1.同步代码块(synchronized)

image-20231207212108877

image-20231207212448431

1.对于静态方法,synchronized(类名.class)

image-20231207212509666

2.对于示例方法,synchronized(this)

image-20231207214740211

2.同步方法

image-20231207215241122

image-20231207215358596

synchronized不但可以修饰方法,还可以修饰成员变量、静态变量等。


同步代码块锁的范围更小,性能更好,因为需等待的范围小

image-20231207215343964

3.Lock锁

image-20231207220238082

1.创建锁对象,并多态写法,建议用final修饰

image-20231207215929023

2.加锁和解锁,解锁一定要放在finally里,因为中间代码一旦出错,未解锁的话,该实例的其他线程会一直等待解锁

image-20231207220017017

6.线程通信

wait()、notify()及notifyAll()方法。

image-20231207220343218

image-20231207220349546

image-20231207220559740

示例代码:

image-20231207220835718

image-20231207220909430

image-20231207220921225

7.线程池

定义

image-20231207221029904

创建线程池

image-20231207221230548

方式一

构造器参数描述

image-20231207221500450

参数五任务队列可以是new ArrayBlockingQueue<>(n)表示n个缓存队列,new LinkedBlockingQueue<>()表示可以无限多个队列。任务队列是指线程排队的队列

参数六线程工程可以是Executors.defaultThreadFactory()表示使用默认的线程工程。

参数七任务拒绝策略如果是new ThreadPoolExecutor.AbortPolicy()表示抛异常进行处理。

image-20231207222455774

image-20231207222518758

注意事项

image-20231207222544827

常用方法
1.线程池处理Runnable任务的方法

image-20231207222744292

2.线程池处理Callable任务的方法

image-20231207223936256

示例代码1:处理Runnable线程

image-20231207222909880

线程池并没有死亡

image-20231207223023546

线程池的关闭

image-20231207223204886

创建临时线程

image-20231207223331386

都满了,执行任务策略

image-20231207223521541

示例代码2:处理Callable线程

image-20231207224433064

拒绝策略

image-20231207223807913


方式二-Excutors工具类(创建的线程可定期执行任务)

image-20231207224854067

pool就是线程池对象

image-20231207225149107

注意事项:

image-20231207225408429

image-20231207225334010

8.并发与并行及线程的生命周期

image-20231208121551228

image-20231208121610181

并发的每次处理16个线程,所以说并发和并行同时进行的

image-20231208121649428

image-20231208121936248

image-20231208122220369

sleep方法不会释放锁权限。

image-20231208122228191


9.悲观锁、乐观锁

image-20231208124006594

悲观锁示例代码:

出现了线程安全问题

image-20231208122812916

image-20231208123703869

乐观锁示例代码:

image-20231208124329614

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1333510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WorkPlus超级APP助力企业节省IT人力成本,实现快速移动化

在信息化时代&#xff0c;移动应用已经成为企业发展的重要组成部分。然而&#xff0c;开发和维护原生客户端的成本却相对较高&#xff0c;需要大量的iOS、安卓和桌面端工程师。为了解决这一问题&#xff0c;WorkPlus作为一个功能完备的超级APP&#xff0c;为企业节约了大量的IT…

MyBatis动态sql中foreach标签介绍和使用

MyBatis动态sql中foreach标签介绍和使用 参数解释&#xff1a; foreach 的主要作用在构建 in 条件中&#xff0c;它可以在 sql 语句中进行迭代一个集合。foreach 元素的属性主要有 collection&#xff0c;item&#xff0c;separator&#xff0c;index&#xff0c;open&#x…

Github 2023-12-24 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-24统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5Jupyter Notebook项目2C项目1C项目1Go项目1Java项目1JavaScript项目1Ruby项目1 Serverless Frame…

探索微软Edge:使用方法和心得分享

学习目标&#xff1a; 了解微软Edge的基本功能和使用方法。掌握在微软Edge上进行浏览、搜索和书签管理的技巧。学习如何使用微软Edge进行隐私和安全管理。探索微软Edge的扩展和其他高级功能。 学习内容&#xff1a; 微软Edge的简介&#xff1a;了解微软Edge的起源、特点和与其…

AI一键注释代码、阅读整个项目、转换编程语言。已开源!

获取github源码地址和国内url、key方式&#xff1a;在文章底部 大家好今天给大家介绍一款开源项目&#xff0c;这个项目是由渡码维护的&#xff0c;这个项目支持自己的大模型和使用openai两种方式&#xff0c;本文章介绍使用openai的方式&#xff01; 使用过程中发现两个问题…

如何利用flume进行日志采集

介绍 Apache Flume 是一个分布式、可靠、高可用的日志收集、聚合和传输系统。它常用于将大量日志数据从不同的源&#xff08;如Web服务器、应用程序、传感器等&#xff09;收集到中心化的存储或数据处理系统中。 基本概念 Agent&#xff08;代理&#xff09;&#xff1a; …

【JAVA面试题】什么是引用传递?什么是值传递?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 博客的正文部分可以详细介绍Java中参数传递的机制&#xff0c;强调Java是按值传递的&#xff0c;并解释了基本数据类型和对象引用在这种传…

【FPGA】分享一些FPGA视频图像处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

每次maven刷新jdk都要重新设置

pom.xml <java.version>17</java.version> 改为<java.version>1.8</java.version>

【BBuf的CUDA笔记】十,Linear Attention的cuda kernel实现解析

欢迎来 https://github.com/BBuf/how-to-optim-algorithm-in-cuda 踩一踩。 0x0. 问题引入 Linear Attention的论文如下&#xff1a; Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention&#xff1a;https://arxiv.org/pdf/2006.16236.pdf 。官方…

WPF中DataContext的绑定技巧-粉丝专栏

&#xff08;关注博主后&#xff0c;在“粉丝专栏”&#xff0c;可免费阅读此文&#xff09; 先看效果&#xff1a; 上面的绑定值都是我们自定义的属性&#xff0c;有了以上的提示&#xff0c;那么我们可以轻松绑定字段&#xff0c;再也不用担心错误了。附带源码。 …

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化 基础地图使用基础地图演示基础地图演示 - 视觉映射器 疫情地图-国内疫情地图案例效果数据整理 疫情地图-省级疫情地图省疫情地图 基础地图使用 基础地图演示 代码示例&#xff1a; &quo…

【c++、数据结构课设】哈夫曼树

时间过的真快&#xff0c;转眼之间一个学期即将结束&#xff0c;想必这个时候大家都在准备各科的课设作业&#xff0c;本期内容是我的数据结构课设&#xff0c;希望能给大家带来帮助&#xff0c;如果有任何不足或需要改进的地方&#xff0c;欢迎各位提出宝贵的意见。 屏幕录制2…

2023年12月24日学习总结

今日to do list&#xff1a; 做kaggle上面的流量预测项目☠️ 学习时不刷手机&#x1f921; okkkkkkkkkkkkkk 开始&#x1f44d;&#x1f34e; 0、我在干什么&#xff1f; 我在预测一个名字叫做elborn基站的下行链路流量&#xff0c;用过去29天的数据预测未来10天的数据 1、…

Json和Xml

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第21章《Json和Xml》 二、Xml的介绍 Xml的含义&#xff1a; 可标记性语言&#xff0c;它将数据以一种特别简单文本格式储存。让所有人和几乎所有的计算机都能理解。 XML文件示例&#xff1a; <?xml version"1.…

HarmonyOS - 基础组件绘制

文章目录 所有组件开发 tipsBlankTextImageTextInputButtonLoadingProgress 本文改编自&#xff1a;<HarmonyOS第一课>从简单的页面开始 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997 所有组件 在 macOS 上&#xff0c;组…

原来电脑并不需要重装系统才能恢复出厂设置,这个操作学起来!

前言 小伙伴们应该都知道手机上有恢复出厂设置的功能&#xff0c;如果想要把手机送给朋友或者卖给别人&#xff0c;就会先恢复出厂设置。 但换到Windows电脑上之后&#xff0c;如果出现同样的情况&#xff0c;就会第一时间想到重装系统。就好像Windows电脑上不存在恢复出厂设…

顶级旗舰ET9出道,蔚来还是那个「最不计成本」的中国车品牌

作者 |张祥威 编辑 |德新 2008年&#xff0c;李斌和新浪的曹国伟几人一起喝酒&#xff0c;发了第一条微博&#xff0c;「天冷带围巾&#xff0c;心冷发微博」&#xff0c;一晚上涨了2000多个粉丝&#xff0c;他偶尔还会针砭时事&#xff0c;很快积累了最早一波粉丝。 创立蔚来…

[Linux] Mysql数据库中的用户管理与授权

一、登录用户的管理 1.1 查看用户密码的信息 用户信息存放在 mysql 数据库下的 user 表&#xff08;MySQL 服务下存在一个系统自带的 mysql 数据库&#xff09;。 use mysql ; show tables; desc user; 查看密码信息的命令&#xff1a; 能看到密码信息&#xff1a;是经过加…

Python入门学习篇(七)——列表切片字符串切片

1 列表切片 1.1 语法结构 列表的变量名[start:end:step] """ start表示截取的开始位置(下标从0 开始)&#xff0c;不填是默认是0 end截取的最后一个元素位置1, 不填是截取到最后一个元素 step 每隔几个(step-1)去获取值,默认没填时,step值为1 因而 取值范围为…