1、进程 、程序 、线程
- 程序:是一种静态的概念,能完成某种功能,是一种固定的逻辑和数据的集合,存储在电脑硬盘内,比如.exe执行程序和.class字节码;
- 进程:是一种动态的概念,是程序的一次运行,或者是正在运行的程序,存储在电脑内存中,会消耗cpu;
- 线程:是一条独立执行任务的路径。
进程和线程的关系:
- 一条进程中至少包含有一条或者多条线程,一条线程必须存在于一条进程中,线程不可能脱离进程独立存在;
- 进程具有独立分配cpu资源的权力,线程不行,线程只能共享一条进程的资源。
并行和并发
- 并行:是多个任务同时执行,在有多个cpu的前提下,可以理解是多个任务都在被cpu处理
- 并发:多个任务同时发起或者多个任务同时申请执行,只有一个cpu,cpu只要执行切换得足够快,就会导致像是多个任务同时在执行得错。
多线程
第一种方式
- 定义一个类继承Thread类,
- 重写Thread类的run()方法,在方法中定义要实现的功能
- 创建自定线程类的对象,
- 调用线程的start方法,启动线程
-
public class Demo04_多线程的第一种设计方式之继承 {
public static void main(String[] args) {
//创建自定义的线程对象
MyThread mt = new MyThread();
//调用start()方法,开启线程
mt.start();
for (int i = 1; i <= 100; i++) {
System.out.println(i + "###main");
}
}
}
//定义一个类,继承Thread类
class MyThread extends Thread {
//重写run方法,定义线程运行的内容
@Override
public void run() {
for (int i = 1; i <= 100; i++) {
System.out.println(i + "...MyThread");
}
}
}
第二种方式
- 定义一个任务类,实现runnable接口
- 重写runnable接口中的run方法,用来定义任务的内容
- 创建任务类的对象
- 创建一个新的Thread对象,传入任务类对象(在对象的构造方法中创建匿名对象任务类)
- 调用start方法,启动线程
public class Demo05_多线程的第二种设计方式之实现 {
public static void main(String[] args) {
//创建任务类对象
MyTask mt = new MyTask();
//创建线程Thread类的对象
Thread t = new Thread(mt);
//开启线程
t.start();
for (int i = 1; i <= 100; i++) {
System.out.println(i + "####main");
}
}
}
//定义一个任务类,实现Runnable接口
class MyTask implements Runnable {
//重写run方法,定义任务的内容
@Override
public void run() {
for (int i = 1; i <= 100; i++) {
System.out.println(i + "...MyTask");
}
}
}