多线程
2023-07-29 15:45:53 2 举报
AI智能生成
多线程
作者其他创作
大纲/内容
进程和线程
进程:运行中的程序就是一个进程(特点:宏观并行,微观串行)
线程:程序中的控制流程,它是CPU的调度单元
关系:一个进程中包含一个或多个线程
创建线程(重点)
1.通过继承Thread类
2.实现Runnable接口
两种方式的区别:
1.创建Thread类,那么当前类就是一个线程类。实现Runnable接口当前这个类只是一个线程任务。
2.在java中只支持单继承,所以实现Runnable更加的灵活
线程的常用方法
1.设置线程名(setName、getName(获取线程名))
若没有设置,默认名为Thread-N
2.设置线程优先级(setPriority、getPriority)
若没有设置,默认优先级为5,设置优先级只能提高抢占CPU的概率
3.线程休眠(Thread.sleep(毫秒数))
让当前线程进入休眠状态,并让出CPU使用权,直到休眠结束才会继续抢占CPU
4.线程礼让(yeild)
本次会立马让出CPU使用权,但是立马会去抢下次的CPU使用权
5.线程加入(join)
在当前线程中加入另一线程,必须要将另一个线程执行完之后才会继续执行当前线程
线程的状态(等待)
线程安全(重点)
线程不安全:
多个线程操作临界资源,破坏原子操作,可能会造成数据不一致
如何解决线程不安全:
1.同步代码块
synchronized(临界资源对象){ //互斥锁标记
2.同步方法
public synchronized void sale(){ //互斥锁标记是this对象
线程同步买票问题
1.同步方法
2.同步代码块
线程的生命周期
线程死锁
当第一个线程拥有A对象的锁标记,并等待B对象的所标记。同时第二个线程拥有B对象锁标记,同时等待A对象的锁标记时,产生死锁
线程池
原理
静态线程池(newFixedThreadPool(指定线程数))
动态线程池(newCachedThreadPool())
Callable接口和Future接口
区别:
1.这两个接口都可以当做线程任务提交并执行
2.Callable接口执行完线程任务之后有返回值,而Runnable接口没有返回值
3、Callable接口中的call方法已经抛出了异常,而Runnable接口不能抛出编译异常
线程池7个核心参数
1.corePoolSize
核心线程池大小即初始化的线程数
2.maximumPoolSize
最大线程池大小
3.keepAliveTime
线程池的最大空闲时间,超过这个时间后,空闲线程会被回收
4.unit
keepAliceTime的时间单位
5.workQueue
任务队列,用于存放等待执行的任务
6.threadFactory
线程工厂,用于创建新线程
7.handler
拒绝策略,用于处理无法处理的任务
常见的任务队列
直接提交任务队列
有界任务队列
无界任务队列
优先任务队列
延迟任务队列
可靠性任务队列
并行任务队列
Lock锁
synchronized和Lock锁的区别:
1、Lock是Java中的类,synchronized是Java中的关键字
2、Lock是显示的上锁和释放锁,而synchronized自动上锁和释放锁
3、当同步代码出现异常,Lock不会自动释放锁(可能会出现死锁),synchronized会自动释放锁对象
4、Lock锁和synchronized锁都可以实现重入锁(避免死锁)
5、Lock锁可以实现公平锁和非公平锁,synchronized不能实现公平锁
6、Lock中提供了读写锁(特点:读读不互斥。读写互斥。写写互斥)
1、Lock是Java中的类,synchronized是Java中的关键字
2、Lock是显示的上锁和释放锁,而synchronized自动上锁和释放锁
3、当同步代码出现异常,Lock不会自动释放锁(可能会出现死锁),synchronized会自动释放锁对象
4、Lock锁和synchronized锁都可以实现重入锁(避免死锁)
5、Lock锁可以实现公平锁和非公平锁,synchronized不能实现公平锁
6、Lock中提供了读写锁(特点:读读不互斥。读写互斥。写写互斥)
读写锁
重入锁
公平锁
synchronized锁升级
1.无锁
当锁对象被创建,还没有线程进入的时候,此时锁对象出于无锁状态
2.偏向锁
线程A进入同步代码并获得锁对象时会保存线程id,以后线程A进入到同步代码中无需使用CAS加锁或释放锁,只需要验证线程id
3.轻量级锁(自旋锁)
当前锁处于偏向锁,后面线程B进入到同步代码,线程AB会使用CAS竞争并升级为轻量级锁
4.重量级锁
若线程没有获得轻量级锁,且自旋次数大于阈值(10次),则会升级为重量级锁
互斥锁标记:任意java对象,一定要保证唯一
0 条评论
下一页