目录:什么是多线程;多线程的两个概念;多线程的实现方式;常见的成员方法;线程安全的问题;死锁;生产者和消费者
一.什么是多线程:(有了多线程,我们就可以让程序同时做多件事情)
1.线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程中,是进程的实际运作单位
2.简单理解:应用软件中相互独立,可以同时运行的功能
3.多线程的作用:提高效率
4.多线程的应用场景:只要你想让多个事情同时运行就需要用到多线程
二.多线程的两个概念:
1.并发:在同一时刻,有多个指令在单个CPU上交替执行
2.并行:在同一时刻,有多个指令在多个CPU上同时执行
三.多线程的实现方式:
1.继承Thread类的方式进行实现
(1)自己定义一个类继承Thread
(2)重写run方法
(3)创建子类的对象,并启动线程
2.实现Runnable接口的方式进行实现
(1)自己定义一个类实现Runnable接口
(2)重写里面的run方法
(3)创建自己的类的对象
(4)创建一个Thread类的对象,并开启线程
3.利用Callable接口和Future接口方式实现
特点:可以获取到多线程运行的结果
(1)创建一个类MyCallable实现Callable接口
(2)重写call(是有返回值的,表示多线程运行的结果)
(3)创建Callable的对象(表示多线程要执行的任务)
(4)创建FutureTask的对象(作用管理多线程运行的结果)
(5)创建Thread类的对象,并启动(表示线程)
四.常见的成员方法:
1.如果我们没有给线程设置名字,线程也是有默认的名字的 格式:Thread-X(X序号,从0开始的)
2. sleep注意细节:
(1)哪条线程执行到这个方法,那么哪条线程就会在这里停留对应的时间
(2)方法的参数就是睡眠的时间,单位毫秒 1秒=1000毫秒
(3)当时间到了线程就会自动醒来,继续执行下面的其它代码
3.守护线程(备胎):当非守护线程执行完毕后,守护线程也会陆续结束
五.线程安全的问题:
1.同步代码块:把操作共享数据的代码锁起来
格式:synchronized (锁){
操作共享数据的代码
}
锁一般写成 MyThread.class
六.死锁
七.生产者和消费者:(常见方法)
1.线程的状态:
新建状态(new) -> 创建线程对象
就绪状态(runnable) -> start方法
阻塞状态(blocked) -> 无法获得锁对象
等待状态(waiting) -> wait方法
计时状态(timed-waiting) -> sleep方法
结束状态(terminated) -> 全部代码执行完毕