1、进程:它是内存中的一段独立的空间,可以负责当前应用程序的运行。当前这个进程负责调度当前程序中的所有运行细节。
进程代表一个运行中的程序,是资源分配与调度的基本单位。
2、线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的空间。
在一个进程中,每个独立的功能都需要独立的去运行,这时又需要把当前这个进程划分成多个运行区域,每个独立的小区域(小单元)称为一个线程。
3、进程与线程的关系:
进程是负责整个程序的运行,而线程是程序中具体的某个独立功能的运行。一个进程中至少应该有一个线程。
4、多线程
多线程:在一个进程中,我们同时开启多个线程,让多个线程同时去完成某些任务(功能)。
多线程的目的:提高程序的运行效率。
举例:大小饭店对比 有厨师,有服务员,有收银员等。
5、创建线程的第一种方式
- 需要定一个类继承Thread类
- 复写Thread类中的run方法
- 创建子类对象
- 启动线程
代码:
package com.wenlong.demo;
public class ThreadSon extends Thread{
//1、需要定义一个类继承Thread类
//2、复写Thread类中的run方法
public void run(){
for(int i=1;i<30;i++){
System.out.println("线程创建的第一种方式:" + i);
}
}
}
package com.wenlong.demo;
public class TreadDemo1 {
public static void main(String[] args) {
//3、创建子类对象
ThreadSon demo = new ThreadSon();
//4、启动线程
demo.start();
for (int i = 0; i < 30; i++) {
System.out.println("创建线程的第一种方式,主线程:" + i);
}
}
}
6、创建线程的第二种方式
- 定义类实现Runnable接口,并在实现类中实现run方法
- 创建实现类的对象
- 创建Thread类的对象,在创建Thread对象的时候,把实现类对象交给Thread
- 开启线程
代码:
package com.wenlong.demo;
//1、 定义类实现Runnable接口,在实现类中实现run方法
public class TreadDemo2 implements Runnable {
public void run() {
for (int i = 0; i < 30; i++) {
System.out.println("创建线程的第二种方式:" + i);
}
}
}
package com.wenlong.demo;
public class RunnableDemo {
public static void main(String[] args) {
//2、创建实现类的对象
TreadDemo2 d = new TreadDemo2();
//3、创建Thread类的对象,在创建Thread对象的时候,把实现类对象交给Thread
Thread s = new Thread(d);
//4、开启线程
s.start();
for (int i = 0; i < 30; i++) {
System.out.println("创建线程的第二种方式,主线程:" + s.getName() + "当前线程的执行对象:" + s.currentThread());
}
}
}