Java多线程笔记
Java多线程
基本概念
线程 是操作系统能够调度的最小单位,他被包含再进程志宏,是进程中的实际运作单位
进程 进程是程序的基本执行实体
并发和并行
并发:在同一时刻,有多个指令在单个CPU上交替执行
并行 在同一时刻,有多个指令在多个CPU上同时执行
多线程的实现方式
继承Thread类的方式进行实现
直接创建Thread对象
实现Runnable接口的方式进行实现
1.自定义一个类实现Runnable接口
2.重写里面的run方法
3.创建自己类的对象(表示多线程要完成的任务)
4.创建一个Thread对象(创建线程对象)
利用Callable接口和Future接口方式实现
特点:可以获取到多线程的运行结果
1.创建一个类实现Callable接口
2.重写call(有返回值,表示多线程运行的结果)
3.创建实现了Callable接口的实例化对象(表示多线程要执行的任务)
4.创建实现了Future接口的实例化对象FutureTask的对象(用于管理多线程运行的结果)
5.创建一个Thread对象(创建线程对象)
常见的成员方法
static Thread currentThread()
返回对当前正在执行的线程对象的引用。
void setPriority(int newPriority)
更改线程的优先级。
static void sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响
void start()
使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
void setName(String name)
改变线程名称,使之与参数 name 相同
void join()
等待该线程终止。 (插入线程)
static void yield()
暂停当前正在执行的线程对象,并执行其他线程(出让线程)
线程的生命周期
线程安全
synchronize锁
同步代码块 把操作共享数据的代码锁起来
//锁是默认打开的,有一个线程进去了,锁自动关闭
//里面的代码全部执行完毕,代码出来,锁自动打开
//锁对象一定要是唯一的,不然一个对象一个锁就失去了锁的意义(可以传递当前类字节码文件的对象 eg.MyThread.class ,保证某一对象的锁的唯一性)
synchronized(锁){
操作共享数据的代码
}
同步方法 就是把synchronized关键字加到方法上
//本质和同步代码块是一样的,就是锁住的是一个方法,但是锁的对象不能自己指定
//非静态时对象时this,静态的对象时当前类的字节码对象
权限修饰符 synchronized 返回值类型 方法名(方法参数){···}
lock锁
//相比synchronizd锁可以自己手动的上锁和手动的释放锁
//Lock是接口不能直接实例化,可以用他的实现类ReentrantLock来实例化
void lock()
获取锁
void unlock()
释放锁。
死锁
简单来说就是锁里套锁,在多线程执行过程中可能存在两个线程,一个线程进入了一个大锁,另一个线程进入了这个大锁中的一个小锁,此时进入大锁中的只能等待小锁解锁再进去,假如小锁中有大锁未解开的锁,此时就陷入了俩个线程一起等待,进入死锁
线程池
Executors:线程池的工具类
static ExecutorService newCachedThreadPool()
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
static ExecutorService newFixedThreadPool(int nThreads)
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
static ThreadFactory defaultThreadFactory()
返回用于创建新线程的默认线程工厂
//自定义线程池
ThreadPoolExecutor(int corePoolSize, //核心线程数量,可以为负数
int maximumPoolSize, //最大线程数量
long keepAliveTime, //空闲线程最大存活时间
TimeUnit unit, //时间单位
BlockingQueue<Runnable> workQueue, //任务队列
ThreadFactory threadFactory, //创建线程工厂
RejectedExecutionHandler handler) //任务的拒绝策略
用给定的初始参数创建新的 ThreadPoolExecutor。(自定义线程池)
当核心线程满的时候再提交任务会派对
当核心线程满,排队满了,就会创建临时线程
当核心线程满,排队满,临时线程满了,会触发任务拒绝策略
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)