进程:是一个正在执行中的程序
每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中的一个独立的控制单元 线程在控制着进程的执行
一个进程至少又一个线程
java 虚拟机VM 启动的时候会有一个进程java.exe 该进程中至少有一个线程负责java程序的执行
而且这个线程运行的代码存在于main方法中 该线程成为主线程
扩展:其实更细节说jvm ,jvm启动不止一个线程,还有负责垃圾回收机制的线程
创建线程的第一种方法:继承Thread类
步骤:1.定义类继承Thread
2.复写Thread类中的run方法: 目的将自定义代码存储在run方法。让线程运行
3.调用线程的start :该方法的两个作用:启动线程,调用run方法
创建线程的第二种方法:实现Runable接口
步骤:1.定义类实现Runable接口
2.覆盖Runable接口中的run方法 ,将线程要运行的代码存放在该run方法中
3.通过Thread类建立线程对象
4.将Runable接口的子类对象作为实际参数传递给Thread类的构造函数
为什么要将Runable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runable接口的子类对象,所以要让线程去指定指定的run方法。
就必须明确该run方法的所属对象
5.调用Thread类的start方法开启线程并调用Runable接口子类的run方法
实现方式和继承方式有什么区别?
实现方式好处:避免了单继承的局限性
在定义线程时,建立使用实现方式
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中
实现Runable:线程代码存放在接口子类的run方法中
notify();唤醒第一个进入等待的
jdk1.5中提供了 多线程升级的解决方案
将同步synchronized替换成现实的Lock操作
将Object中的wait , notify notifyAll 替换成 Condition对象 await single signalAll()
该对象可以Lock锁 进行获取
如何停止线程?
stop方法已经过时
只有一种方法 ,run方法结束
开启多线程运行,运行代码通常是循环结构
只要控制住循环,就可以让run方法结束 ,也就是线程结束
特殊情况 当线程处于了冻结状态,就不会读取到标志,那么线程就不会停止
jion:
当A线程执行到了B线程的。jion()方法时,A就会等待。等B线程都执行完了,A才会执行。
jion可以用来临时加入线程执行。
线程优先级