目录
ThreadPoolExecutor构造器—— 创建线程池对象
编辑 线程池的注意事项编辑处理Runnable任务的方法
单线程
多线程
概念
多线程的创建方式一
多线程的注意事项
多线程的创建方式二:实现Runnable接口
线程创建
多线程创建方式三
Thread提供的和线程操作相关的方法和构造器
线程安全问题
线程安全问题是指在多线程环境下,多个线程同时访问和操作共享的数据时可能引发的问题。线程安全问题主要包括:
-
竞态条件(Race Condition):多个线程同时竞争访问和修改共享数据,由于执行顺序不确定性,可能导致最终结果与预期不符。
-
数据不一致性(Data Inconsistency):多个线程同时修改共享数据,但由于执行顺序不确定性,可能导致数据状态不一致。
-
死锁(Deadlock):多个线程互相等待对方释放资源而无法继续执行的状态。
-
活锁(Livelock):多个线程在执行过程中不断重试避免冲突但又无法继续执行的状态。
线程安全问题的解决方法包括使用互斥锁、信号量等同步机制来保证共享数据的访问和修改的互斥性,以及使用条件变量等方式来保证线程间的协作和通信。
线程同步(解决线程安全问题)
使用加锁保证线程安全
加锁——方法一:同步代码块
锁对象的选择
加锁——方法二:同步方法
加锁——方法三:Lock锁
Lock是一个接口,使用它的实现类ReenTrantLock来构建Lock对象。使用final,保证其不可被修改
private final Lock lk = new ReentrantLock();
对于共享资源代码应该放在加锁和解锁之间,并且为了共享资源代码出现异常而直接结束程序,应该使用 lk.lock;try{共享资源代码}finally{lk.unlock()}这样的语句保证锁一定会被释放。
线程通信
概念、模型
线程池
概述
工作原理
创建线程池
ThreadPoolExecutor构造器—— 创建线程池对象
理解参数(面试重点)
线程池的注意事项处理Runnable任务的方法
新任务拒绝策略
线程处理callable
线程池对象:Executors(工具类)
核心线程数量到底配置多少个
Executors使用可能存在的陷阱
并发和并行
进程
并发的理解
并行的理解
多线程 是并发和并行同时进行的