第九章 多线程
1.多线程的三种实现方式
1.继承Thread
2.实现Runnable
3.实现Callable
2.多线程的生命周期
![请添加图片描述](https://img-blog.csdnimg.cn/c76d8129be1e445abe0eaa2f944336e3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATXVzdGFuZy5NcQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
3.线程的调度
1.抢占式(java采用的)
优先级决定抢到CPU时间片的概率
2.均分式 (有一些编程语言)
CPU时间片的时间长度一样,平均分配
3.线程调度方法
3.1 实例方法
setPriority(int n)设置线程优先级
getPriority(int n)获取线程优先级
MAX_PRIORITY=10
MIN_PRIORITY=1
NORM_PRIORITY=5
3.2 静态方法
yield()让位方法
不会造成阻塞,暂停当前的正在执行的线程对象,让给其他线程来使用
3.3 实例方法
join () 合并线程
主方法中,t1.join()表示,把t1合并到主线程中,主线程阻塞,等待t1线程执行完,主线程继续。
4.线程安全(重点五颗星)
1.什么时候数据在多线程并发的情况下不安全
第一:多线程并发
第二:有共享数据
第三:共享数据有修改的行为
2.如何解决线程安全问题
线程同步机制:也就是线程排队
第一:尽量使用局部变量代替成员变量
第二:如果必须使用成员变量,那么推荐创建多个对象(一个 线程一个对象,数据就不共享了)
第三:线程同步机制
5.定时器
6.守护线程
方法:设置setDemo();
如果t1是守护线程,那么只要主线程结束,那么哪怕t1线程是死循环输出,也会停止。
7.wait方法和notify方法
T线程在o对象上活动
那么当o.wait()的时候,会使在o对象上活动的线程进入等待状态
直至o.notify()来唤醒
7.生产者和消费者
8.死锁