首先要了解以下概念:
进程:进程是资源分配的最小单位。
线程:线程是程序执行的最小单位。
计算机在执行程序的时候,会创建相应的进程,进行资源分配的时候,是以进程为单位进行相应的分配。
每个进程都有相应的线程,在执行程序时,实际上是执行相应的线程。
地址空间:进程是有自己独立的地址空间,每次启动一个线程,都会分配对应的地址空间来处理数据,而线程是没有独立空间的,但是可以共享进程的地址空间。
资源拥有:
进程之间的资源是相互独立的。同一个进程内的线程是可以共享该进程的资源。
执行过程:每个独立的进程有一个程序运行的入口,会顺序去执行程序的入口,线程不得独立执行,必须依存在应用程序中,有应用程序提供多个线程执行程序。
程序中使用多个线程(并发),效率会提升,线程是我们可以控制程序中的最小的执行单位,我们的多线程其实就是多个线程在进程里面去抢占资源。
了解以上概念后,我们可以在java中去实现线程,本篇先介绍使用Thread类创建进程。
//创建进程001
public class Thread01 extends Thread {
public void run() {
//进行死循环
for(;1==1;) {
try {
sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程001");
}
}
}
//创建进程000,同样进行死循环
public class Thread02 extends Thread {
public void run() {
for(;1==1;) {
try {
sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程002");
}
}
}
//进行测试
//启动线程,调用的是start方法而不是run方法,start方法会调用start0,start0是一个native方法,JVM会自动执行
public class TestThreak {
public static void main(String[] args) {
Thread01 th1=new Thread01();
Thread02 th2=new Thread02();
th1.start();
th2.start();
}
}
测试结果:
输出“线程001”或“线程002”的原因是两个线程在抢占进程的资源,哪个线程抢占到了进程的资源便执行该线程,执行完成继续抢占资源。