Nothing

java的多线程

2024/07/18

多线程概述

多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是在进程的基础上进行的进一步划分。所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,一个进程可能包含了多个同时执行的线程。

进程与线程

进程:

正在运行的应用程序:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,即每个进程都有着自己的堆、栈等且是互不共享的。

线程:

进程中的一个执行路径(一段程序从执行到结束的整个过程),共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个线程
线程实际上是在进程的基础上进一步划分的,一个进程执行后,里面的若干执行路径又可以划分为若干个线程

线程调度

分时调度

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

抢占式调度

  • 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。
  • CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核心而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉很快,看上去就是在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。

并发:指两个或多个事件在同一个时间段内发生。

并行:指两个或多个事件在同一时刻发生(同时发生)。

多线程的实现方式

继承Thread类

  1. 创建一个自定义类并继承Thread类;
  2. 重写run()方法,创建新的执行任务(通过thread对象的start()方法启动任务,一般不直接调用run()方法)
  3. 创建自定义类对象实例,调用start(),让线程执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//MyThread.java
public class MyThread extends Thread{
@Override
public void run() { //run()方法就是线程要执行的任务的方法
for (int i = 0; i < 10; i++) {
System.out.println("MyThread" + i);
}
}
}
//ThreadTest.java
public class ThreadTest {
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start(); //启动线程任务
for (int i = 0; i < 5; i++) {
System.out.println("MainThread" + i);
}
}
}

CATALOG
  1. 1. 多线程概述
    1. 1.1. 进程与线程
      1. 1.1.1. 进程:
      2. 1.1.2. 线程:
    2. 1.2. 线程调度
      1. 1.2.1. 分时调度
      2. 1.2.2. 抢占式调度
    3. 1.3. 多线程的实现方式
      1. 1.3.1. 继承Thread类