1 线程的概念
多线程是指同一个程序同时存在多个“执行体”,它们可以同时工作
1.1 进程的概念
一次程序的每一次运行都叫做进程(一个进程可以包含多个线程
1.2 线程的概念
多线程是指一个程序中多段代码同时并发进行
1.3 主线程的概念
JavaMain中的线程就叫做主线程
在Main中执行再创建的线程叫做其他线程
运行结果:
2 Thread类与Runnable接口
再说Thread类之前,我们可以想一想,有没有一种办法能够让三个线程同时进行呢
第一种方法 继承Thread类
这个子类应该重写Thread类中的run()方法,子类的对象需要调用start()来启动
练习:创建2个线程,一个线程负责输出英文字母表,另一个线程负责输出希腊字母表。通过继承Thread类实现创建线程。
第二种方法 实现Runnable接口
通常使用Thread(Runnable target)构造方法创建线程,实现Runnable接口的类可以用来创建线程
练习:创建2个线程,一个线程负责输出英文字母表,另一个线程负责输出希腊字母表。通过实现Runnable接口创建线程。
3 线程的生命周期
3.1 线程的生命周期
线程的生命周期是指线程从产生到消亡的过程,一个线程无论在任何时间都处于某种线程状态
练习 创建3个线程:老师,李四,王五,其中李四准备睡10分钟后再开始听课,王五准备睡45分钟再开始听课。老师在输出3句“上课”后,吵醒休眠的线程李四,李四被吵醒后,负责再吵醒休眠的线程王五。
3.2 线程同步
线程同步就是多线程都需要使用一个synchronized修饰的方法,多个进程同时访问一个变量,并且多个进程要修改这个变量的问题,要进行线程同步处理。
练习 每学期开学,教材科需要购入和出售教材。创建2个线程,一个线程负责购入教材,另一个线程负责向学生出售教材。两个线程都要操作教材科的教材种类及册数数据。 要求通过线程同步,保证一个线程操作完之后,另一个线程再执行。
3.3 协调同步线程
wait()方法中断方法的执行,让本线程等待,允许其他线程使用这个同步方法。
notifyAll()通知所有的由于使用这个同步方法而处于等待的线程结束等待。曾中断的线程就会从刚才的中断处继续执行这个同步方法,并遵循“先中断先继续”的原则。
notify()方法只是通知处于等待中的线程的某一个结束等待。