之前学javase时老师一直强调多线程,IO流等很重要,越到后面有时用的越频繁。在用的时候自己半天想不起来某些方法,所以今天特意准备一篇,也是为了重新复习下,如果有什么不对的,不完善的地方还希望大家多多提建议。
在计算机操作系统中,存在进程、线程、程序。这里就简单解释下,以便区分。
程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
>如:没有运行时的QQ(静态的)
进程(process)是程序的一次执行过程,或是正在运行的一个程序的状态过程:有它自身的产生、存在和消亡的过程。(会显示在任务控制器中)
>如:运行中的QQ(动态的)
线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。
>若一个程序可同一时间执行多个线程,就是支持多线程的。
觉得有时还是分不清,进程和线程,这是可以把进程比喻成多个道,每个道都是由线程组成的。
这时说到线程,就不得不提一下线程的生命周期,就是指线程从创建开始一直到消亡的这个过程。
生命周期分为5个状态创建状态、就绪状态、运行状态、等待状态(阻塞或睡眠)和死亡状态。
1.创建状态。这个线程刚被创建,还没有调用start()方法。这是创建的对象,不能通过isAlive()测试。
2.就绪状态。这时这个线程调用start()方法进入Runnable状态。这是的线程具备了运行时的条件,一旦被调度程序选为运行线程时所处的状态,就会立刻执行。此时的线程不是处于运行状态,但是可以通过isAlive()测试。
3.运行状态。
4.等待、阻塞或者睡眠状态。线程只是缺少运行条件,一旦条件满足,就会转换到就绪状态。
5.死亡状态。一旦线程死去,就不会重新启动,不能再次调用start()方法了。如果继续调用会抛出IllegalThreadException异常。
其中CPU的调度也是值得一提的,在某一时刻CPU具体要运行谁是由CPU和线程的优先级决定的,当线程被CPU运行时,就会开始执行run方法,但可能执行到一半CPU又会被其他可运行线程抢走,而只能暂停执行。