多线程——进程、并发并行、线程同步、线程池、线程通信

目录

单线程

多线程 

概念

多线程的创建方式一

多线程的注意事项 

多线程的创建方式二:实现Runnable接口 

​编辑​编辑 多线程创建方式三

​编辑 Thread提供的和线程操作相关的方法和构造器

​编辑 线程安全问题

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

加锁——方法一:同步代码块

​编辑 锁对象的选择

 加锁——方法二:同步方法

 加锁——方法三:Lock锁

线程通信 

概念、模型

线程池

概述

​编辑工作原理

​编辑 

创建线程池 

ThreadPoolExecutor构造器—— 创建线程池对象

​编辑 线程池的注意事项​编辑处理Runnable任务的方法

新任务拒绝策略

​编辑 线程处理callable

​编辑线程池对象:Executors(工具类)

核心线程数量到底配置多少个 

Executors使用可能存在的陷阱

​编辑 并发和并行

进程

并发的理解

​编辑 

并行的理解 

线程的生命周期 

​编辑 线程的6种状态相互转换


单线程

多线程 

概念

多线程的创建方式一

多线程的注意事项 

多线程的创建方式二:实现Runnable接口 

 线程创建

 多线程创建方式三

 Thread提供的和线程操作相关的方法和构造器

 线程安全问题

线程安全问题是指在多线程环境下,多个线程同时访问和操作共享的数据时可能引发的问题。线程安全问题主要包括:

  1. 竞态条件(Race Condition):多个线程同时竞争访问和修改共享数据,由于执行顺序不确定性,可能导致最终结果与预期不符。

  2. 数据不一致性(Data Inconsistency):多个线程同时修改共享数据,但由于执行顺序不确定性,可能导致数据状态不一致。

  3. 死锁(Deadlock):多个线程互相等待对方释放资源而无法继续执行的状态。

  4. 活锁(Livelock):多个线程在执行过程中不断重试避免冲突但又无法继续执行的状态。

线程安全问题的解决方法包括使用互斥锁、信号量等同步机制来保证共享数据的访问和修改的互斥性,以及使用条件变量等方式来保证线程间的协作和通信。

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

使用加锁保证线程安全

加锁——方法一:同步代码块

 锁对象的选择

 加锁——方法二:同步方法

 加锁——方法三:Lock锁

Lock是一个接口,使用它的实现类ReenTrantLock来构建Lock对象。使用final,保证其不可被修改

private final Lock lk = new ReentrantLock();

 对于共享资源代码应该放在加锁和解锁之间,并且为了共享资源代码出现异常而直接结束程序,应该使用 lk.lock;try{共享资源代码}finally{lk.unlock()}这样的语句保证锁一定会被释放。

线程通信 

概念、模型

 

线程池

概述

工作原理

创建线程池 

ThreadPoolExecutor构造器—— 创建线程池对象

理解参数(面试重点)

 线程池的注意事项处理Runnable任务的方法

新任务拒绝策略

 线程处理callable

线程池对象:Executors(工具类)

核心线程数量到底配置多少个 

Executors使用可能存在的陷阱

 并发和并行

进程

并发的理解

并行的理解 

 多线程 是并发和并行同时进行的

线程的生命周期 

 线程的6种状态相互转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值