进程:当前正在运行的程序,一个应用程序再内存中的执行区域
线程:进程中一个执行控制单元,执行路径
一个进程最少有一个线程,也可由有多个线程,线程是cpu最小的调度单元
单线程:安全性高,效率底
多线程:安全性底,效率高——360卫士,边体检,边清理,边杀毒/迅雷同时下载多个资源
cpu执行程序(线程)的随机性,多个程序来回高速切换
主方法是单线程的
Thread类
1、创建一个继承Thread的类
2、重写run方法
3、在需要的地方new线程实例
4、启动线程,调用start方法
Runnable接口
1、创建一个实现Runnable接口的类
2、重写run方法
3、在需要的地方,new Thread类,并把线程类的实例作为入参
4、启动线程,调用start方法
有了Thread为什么还要Runnable?
1、实现Runnable接口,可以继承其他类
2、实现Runnable接口的对象可以放入多个Thread对象中,可以共用实现了Runnable接口的线程类中数据
相关方法:
getName——获取线程的名字
setName——设置线程的名字
currentThread——获取当前线程
sleep——线程睡眠,单位是毫秒
synchronized:同步,可以修饰代码块和方法,一旦被某个线程访问,则直接锁住,其他线程无法访问,只能等解锁
同步:安全性高,效率底
非同步:效率高,安全性底
同步代码块:
synchronized(锁对象){
}
同步方法:
public synchronized void menthod(){
}
注意:锁对象需要被所有的线程所共享
非静态同步方法的默认锁对象是this
静态的同步方法的默认锁对象是当前类字节码对象
线程的生命周期:
状态:
新建:创建线程对象
就绪:具备了执行条件,没有具备执行权力
运行:具备了执行条件,也具备了执行条件
等待:wait,使用锁对象调用wait,会释放执行权力
唤醒:notify,使用锁对象调用notify
死亡:线程对象变成了垃圾