今日目标:(系统编程)
多任务–多线程
|-- 什么是多任务
|-- 操作实现多任务
|-- 单核
1、优先级别调度
2、时间片轮换机制
|-- 多核
|-- 线程、进程
|-- Java中实现多线程的两种方案
|-- 继承Thread类
|-- 实现Runable接口
|-- 看看线程对象的各种方法和属性
|-- Thread.currentThread().getName()
|-- 线程的状态
|-- 停止线程
|-- 两种实现线程的区别?
|-- 线程安全问题
|-- synchronized关键字 同步锁
|-- 死锁现象
|-- 生产者和消费者问题(多线程下,如何控制运行的问题)
|-- 唤醒机制来控制多线程的运行情况
-------------------------------------------------------------------------------------------------------
多任务:
同一时间,运行多个任务
操作实现多任务
|-- 单核
1、优先级别调度
2、时间片轮换机制
|-- 多核
并行:多个任务同时运行
并发:多个任务抢占资源
---------------------------------------------------------------------------------------------------------------------
进程、线程
操作系统是以进程作为资源管理和资源调度的基本单位
线程是CPU资源分配和调度的基本单位和最小单位
一个进程中,至少有一个线程,如果只有一个,这个线程叫做主线程
在Java中,多任务大多数情况下,使用多线程实现的多任务,多线程
Java中实现多线程的两种方案
|-- 继承Thread类
|-- 实现Runable接口
继承Thread类:
在java中不太适合使用 因为Java单继承 所以不太使用
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829104724986.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192229763.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
接口Runnable:
如果去实现MyThread 类 去执行run()方法 会是实现单线程的
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829111309510.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
在构造时可以添加线程的名字
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829111527736.png)
在继承Thread类的情况下 需要重写在 子类中 构造函数
在Thread中原实现方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829111630504.png)
继承后实现方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019082911175171.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829111925432.png)
让线程速度放慢的:
从今天开始,系统开发–多任务–多线程
1、什么是多任务
2、操作系统如何实现多任务
|-- 时间片轮换机制
|-- 优先级别调度
3、两个概念:进程(process)、线程(thread)
4、Java多任务现在都是用多线程实现的
|-- 继承Thread
1、写一个类,继承Thread类,那么该类就一个线程类
2、重写run方法,run方法就是线程需要执行的代码
3、创建该类的对象,调用start方法
|-- 实现Runable接口
1、创建一个类,实现Runable接口
2、实现run方法
3、创建该类的对象,注意:因为该类没有start,也就是说,子线程无法启动
4、需要常见一个Thread对象,利用它的构造方法(start()方法 不能 通过mian函数直接调用
不能直接用,是用来启动线程的 ,在虚拟机中创建和设置线程的 主要是创建 一个线程 在 虚拟中)
|-- 线程的状态
五种状态:
new
ready
running
block
destroy
|-- 停止线程
官方提供的stop,注意,这个已经过时了,官方不推荐使用了
|-- 两种实现线程的区别?
java存在两种线程的实现方案,到底这两种线程的区别?
|-- 线程安全问题
|-- synchronized关键字 同步锁
|-- 死锁现象
|-- 生产者和消费者问题(多线程下,如何控制运行的问题)
|-- 唤醒机制来控制多线程的运行情况
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829113543831.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
线程异常:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192638459.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192656412.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192709110.png)
多线程练习:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192750832.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192813384.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192825852.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
线程安全问题:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192922294.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192935382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829192945429.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
线程安全问题发生的原因: