什么是进程呢?
进程是指运行中的程序,比如我们启动了qq,就启动了一个进程,操作系统就会为该进程分配内存空间 。
进程是程序的一次执行过程,或者是正在运行的程序,它是动态过程:有它自身的产生、存在和消亡的过程。
什么是线程?
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,由进程创建,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程的相关基本概念
1、单线程:同一时刻,只允许执行一个线程
2、多线程:同一时刻,可以执行多个线程,如qq的多聊天窗口
3、并发 :同一时刻多个任务交替执行
4、并行 :同一时刻,多个任务同时执行。多核CPU可以实现并行
线程的创建
1、继承Thread类,重写run方法(其实也是实现了Runnable接口的run方法)
2、实现Runnable接口,重写run方法(java单类继承,如果类已经继承了其它类,就不能继承Thread了,哈哈,所以靠接口真香
//简单模拟一哈Thread类,有错轻喷哈
class StimulateOfThread implements Runnable{
private Runnable target = null;
@Override
public void run(){
if(target != null ){
target.run(); //动态绑定(运行类型tiger)
}
}
public StimulateOfThread(Runnable triger) {
this.target = triger;
}
public void start() {
start0();//这个方法时真正实现多线程方法
}
public void start0() {
run();
}
}
)
注:run.start()方法后线程不一定会马上执行,只是将线程变成了可运行的状态,具体什么时候执行取决于CPU,由它统一调度
继承Thread vs 实现 Runnable的区别
1、本质没区别,Thread实现了Runnable接口
2、实现Runnable 接口方式更加适合多个线程共享一个资源你的情况,并且避免了单继承的限制
线程的方法很多,此处就讲一下interrupt,yield,join方法
interrupt:中断线程,但是并没有真正的结束线程。一般用于中断正在休眠的线程
当该线程执行到一个interrupt 方法时,就会catch一个异常, 可以加入自己的业务代码 InterruptedException 是捕获到一个中断异常。
yield:线程的礼让,让出cpu,让其他线程执行,但是礼让时间不确定,也不一定能成功。
join:线程的插队。插队的线程一旦插队成功,则先执行完插队线程的所有任务
用户线程和守护线程
用户线程:也叫工作线程,当线程的任务执行完成或者以通知的方式结束(setLoop()方法)
守护线程:一般为工作线程服务,当所有的用户线程结束,守护线程自动结束,常见的守护线程:垃圾回收机制
线程的生命周期
猜猜看线程生命周期有多少状态呢?^-^
不多说,直接上图 - ->
哈哈,第一部分总结就到这里了,博主菜鸟一枚,轻喷,嘤嘤嘤