[2025.1.15 JavaSE学习]进程、线程基本概念

一、进程

进程是指运行中的程序

  • 比如我们使用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调度,涉及线程调度知识:
      image


五、通过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(){
		....
	}
}
posted @ 2025-01-16 04:07  Luna-Evelyn  阅读(16)  评论(0)    收藏  举报