一、进程
进程是指运行中的程序
- 比如我们使用QQ,就启动了一个进程,操作系统会为该进程分配内存空间,当使用另一个程序,又启动了一个进程,便又分配了一块内存空间
进程是程序的一次执行过程,或者正在运行的一个程序
二、线程
- 是由进程创建的,是进程的一个实体
- 一个进程可以拥有多个线程
三、并发与并行
并发
- 同一个时刻,多个任务交替执行,造成一种“貌似同时进行”的错觉,单核CPU的多任务就是并发
并行
- 同一个时刻,多个任务同时执行,多核CPU可以实现并行
四、通过继承Thread创建线程
- 当一个类继承了Thread类,该类就可以当作线程使用,使用myClass.start()启动
class MyClass extends Thread{
@Override
public void run(){}
}
- 需要重写run方法,写自己的业务代码,该方法来源于Runnable接口
- 当main线程启动(run)一个子线程后,不会阻塞,会继续执行
为什么是thread.start而不是thread.run
- 如果直接调用run方法,那么该方法作为一个普通的方法,不能起到启动一个thread的作用,会堵塞后续程序执行(执行完毕后才向下执行)
- start源码:
- 底层public synchronized void start()中,会执行start0()方法
- start0()是一个native本地方法(使用本地代码,是JVM调用的,底层为C/C++实现的)
- 具体执行需要CPU调度,涉及线程调度知识:

五、通过Runable创建线程
Java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时用继承Thread类方法来创建线程显然不太可能
- Runable接口中只有run方法,无start,此时做法如下:
public class Thread01{
public static void main(String[] args){
Dog dog = new Dog();
Thread thread = new Thread(dog);
thread.start();
}
}
class Dog implements Runnable{
@Override
public void run(){
....
}
}