一、什么是程序:
程序(Program)是为实现特定目标或解决特定问题而用计算机语言(比如Java语言)编写的命令序列的集合。
这个很容易理解。
二、什么是进程:
进程(process)指一个程序的一次执行过程。
如果我们执行一个程序我们会在任务管理器中找到,相应的列表,如果执行完成,任务管理器的列表中就会消失。下面我们写出一个程序理解一下进程:
public class Test {
public static void main(String[] args) {
try {
Thread.sleep(10000);//程序会等待时间10000ms,然后再继续执行。
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("12343654e");
}
如下两图所示:现在程序在执行,有一个javaw.exe程序。如果程序结束之后就会没有
三、什么是线程 :
线程(thread)又称为轻量级进程,线程是一个程序中实现单一功能的一个指令序列,是一个程序的单个执行流,存在于进程中,是一个进程的一部分。
个人理解就是:线程就是一个个小地模块单元,一个程序运行起来,需要多个模块,这些模块工作造就整个程序运转,而且模块之间互不影响,所以就会发现如下图所示,一个程序有多个线程:
四、如何创建线程对象?
- 继承java.lang.Thread类,重写run方法。
- 实现java.lang.Runnable接口,实现run抽象方法。
public class Test {
public static void main(String[] args) {
try {
Thread.sleep(1000);//程序会等待时间1000ms,然后再继续执行。
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("12343654e");
new TimeThread().start();
}
class TimeThread extends Thread{//方法一:继承Theadf类,并重写润方法
@Override
public void run () {
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0;i<15 ; i++) {
System.out.println("计数" + i);
}
}
}
class countThread implements Runnable{//方法二、实现java.lang.Runnable接口,实现run抽象方法
@Override
public void run() {
for(int j=0;j<10; j++) {
System.out.println("时间"+new Date());
}
}
}
五、 线程生命周期:
线程的生命周期分为一下五步:
- 新建状态(New):新创建了一个线程对象。
- 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
- 运行状态(Running):就绪状态的线程获取了CPU使用权,执行程序代码。
- 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
- 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
堵塞情况有很多,暂时只提一种:sleep();就是我们上述程序中的等待时间,更多堵塞在后续学习中我会持续更新。
有关线程池,线程常用方法,线程之间的数据共享、协作等待,会在后续博客持续输出。