JAVA 多线程(一)

78 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

进程 VS 线程

  • 进程: 是指一个内存中运行的应用程序,一个应用程序可以同时运行多个进程。
  • 线程: 是进程中的一个执行单元,负责当前进程中程序的执行,一个进程至少有一个线程,一个进程可以有多个线程。

简言之: 一个程序运行后至少有一个进程,一个进程可以包含多个线程。

并发 VS 并行

并发:指两个或多个事件同一时间段内发生(单核CPU上多任务之间的切换); 并行:指两个或多个事件同一时刻发生(同时执行,多核CPU多任务并行执行);

注意: 单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并发运行。

线程调度

  • 分时调度

所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。

  • 抢占式调度

优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的是抢占式调度。 - 设置线程的优先级

线程的执行顺序

在这里插入图片描述

创建线程的两类四种方式:

  • 无返回值(重写run方法,void)
    • 继承Thread类方式
    • 实现Runnable接口方式
  • 有返回值(实现call方法,Objec)
    • Callable和Future
    • FutureTask

PS:通过线程池创建多线程

方式一: 继承Thread类

# MyThread 类
public class MyThread extends Thread {
    // 1. 继承Thread并重写run方法
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("run" + i);
        }
    }
}
# main
public static void main(String[] args) {
    // 2. 创建Thread或者Thread子类对象
    MyThread mythread = new MyThread();
     // 3.调用Thread类中的start方法,开启新线程,执行run方法