没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一、知识点总结
(1)多线程相关概念
(2)创建多线程的基本方式
(3)Thread类的常用结构
(4)线程的生命周期
(5)线程的安全问题与线程的同步机制
(6)解决单例模式中的懒汉式的线程安全问题
(7)线程的同步机制带来的问题:死锁
(8)Lock的使用
(9)线程的通信
(10)JDK5.0新增线程创建方式
二、企业真题
(1)线程概述
1、题1
2、题2
3、题3
(2)如何实现多线程
1、题1
2、题2
3、题3
4、题4
5、题5
(3)常用方法、生命周期
1、题1
2、题2
3、题3
4、题4
5、题5
6、题6
(4)线程安全与同步机制
1、题1
2、题2
3、题3
4、题4
5、题5
6、题6
7、题7
8、题8
(5)死锁
1、题1
2、题2
(6)线程通信
1、题1
2、题2
3、题3
4、题4
(7)单例模式(线程安全)
1、题1
2、题2
一、知识点总结
(1)多线程相关概念
🔥
详细博文链接:
https://blog.csdn.net/m0_55746113/article/details/135691683
🗳
知识点梳理
1、程序、进程和线程的区分:
程序(program):为完成特定任务,用某种语言编写的 一组指令的集合 。即指一段静态的代
码。
进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。程序是静态的,进程
是动态的。
进程作为操作系统调度和分配资源的最小单位。
线程(thread):进程可进一步细化为线程,是程序内部的一条执行路径。
线程作为CPU调度和执行的最小单位。
“栈管运行”:Java里面通过方法的调用体现运行的过程,每一个方法的调用都对应一个栈帧,
要入栈运行。
“堆管存储”:对象的创建、数组的创建,这些数据都放在堆里面。
运行的时候,最小的调度单位就是“线程”,每个线程有一个栈。
2、线程调度策略
分时调度 :所有线程 轮流使用 CPU 的使用权,并且平均分配每个线程占用 CPU 的时间。
抢占式调度 :让 优先级高 的线程以 较大的概率 优先使用 CPU。如果线程的优先级相同,那么会
随机选择一个(线程随机性),Java使用的为抢占式调度。
3、了解
单核CPU与多核CPU
并行与并发
(2)创建多线程的基本方式
🔥
详细博文链接:
线程的创建方式一:继承Thread类
https://blog.csdn.net/m0_55746113/article/details/135708814
线程的创建方式二:实现Runnable接口
https://blog.csdn.net/m0_55746113/article/details/135840102
🗳
知识点梳理
1、线程的创建方式一:继承Thread类
1.1 步骤:
① 创建一个继承于Thread类的子类
② 重写Thread类的run() --->将此线程要执行的操作,声明在此方法体中
③ 创建当前Thread的子类的对象
④ 通过对象调用 start() : 1.启动线程 2.调用当前线程的 run()
start()是父类Thread的方法。
1.2 例题:创建一个分线程1,用于遍历100以内的偶数
【拓展】 再创建一个分线程2,用于遍历100以内的偶数
2、线程的创建方式二:实现Runnable接口
2.1 步骤:
① 创建一个实现Runnable接口的类
② 实现接口中的run() -->将此线程要执行的操作,声明在此方法体中
③ 创建当前实现类的对象
④ 将此对象作为参数传递到Thread类的构造器中,创建Thread类的实例
⑤ Thread类的实例调用start():1.启动线程 2.调用当前线程的run()
2.2 例题:创建分线程遍历100以内的偶数
3、对比两种方式?
共同点:
① 启动线程,使用的都是Thread类中定义的start()
② 创建的线程对象,都是Thread类或其子类的实例。
不同点:一个是类的继承,一个是接口的实现。
建议:建议使用实现Runnable接口的方式。
Runnable方式的好处:
① 实现的方式,避免的类的单继承的局限性
② 更适合处理有共享数据的问题。
③ 实现了代码和数据的分离。
联系: public class Thread implements Runnable (代理模式)
(3)Thread类的常用结构
🔥
详细博文链接:
https://blog.csdn.net/m0_55746113/article/details/135881677
🗳
知识点梳理
1、线程中的构造器
public Thread() :分配一个新的线程对象。
public Thread(String name) :分配一个指定名字的新的线程对象。
public Thread(Runnable target) :指定创建线程的目标对象,它实现了Runnable接口
中的run方法。
public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并
指定名字。
2、线程中的常用方法
start() :①启动线程 ②调用线程的run()。
run() :将线程要执行的操作,声明在run()中。
currentThread() :获取当前执行代码对应的线程。
getName() : 获取线程名。
setName() : 设置线程名。
sleep(long millis) :静态方法,调用时,可以使得当前线程睡眠指定的毫秒数。
yield() :静态方法,一旦执行此方法,就释放CPU的执行权。
join() : 在线程a中通过线程b调用join(),意味着线程a进入阻塞状态,直到线程b执行结束,
线程a才结束阻塞状态,继续执行。
isAlive() :判断当前线程是否存活。
过时方法:
stop() :强行结束一个线程的执行,直接进入死亡状态。不建议使用。
void suspend() / void resume() :可能造成死锁,所以也不建议使用。
3、线程的优先级:
getPriority() :获取线程的优先级。
setPriority() :设置线程的优先级。范围[1,10]。
Thread类内部声明的三个常量:
MAX_PRIORITY(10) :最高优先级
MIN _PRIORITY (1) :最低优先级
NORM_PRIORITY (5) :普通优先级,默认情况下main线程具有普通优先级。
剩余26页未读,继续阅读
资源评论
雨翼轻尘
- 粉丝: 6w+
- 资源: 130
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功