什么是线程?它是如何工作的?代码举例讲解

线程(Thread)是进程内的一条执行路径,它是CPU调度和执行的基本单位。一个进程可以包含多条线程,线程共享进程的堆和方法区资源。

线程的工作原理是:

  1. 当我们启动一个线程时,真正执行的是线程对应的run()方法或target中的代码。
  2. CPU可以在多个线程之间快速切换,以提高CPU利用率。这种切换被称为线程的上下文切换。
  3. 线程可以访问共享的堆内存和方法区,实现线程之间的数据交互和通信。
  4. 线程的调度由操作系统的线程调度器完成,Java无法直接控制。我们只能设置线程的优先级来影响调度顺序。

来看一个简单示例:

public class ThreadDemo {
    public static void main(String[] args) {
        new MyThread().start();     // 启动线程
        for (int i = 0; i < 10; i++) {   // main线程执行
            System.out.println("Main: " + i);
        }
    }
}

class MyThread extends Thread {     // 自定义线程类
    @Override
    public void run() {          
        for (int i = 0; i < 10; i++) {
            System.out.println("MyThread: " + i);
        }
    }
}

运行结果:

Main: 0
MyThread: 0  
Main: 1
MyThread: 1
...

在该示例中:

  1. main线程调用start()启动MyThread线程。
  2. CPU开始在main线程和MyThread线程之间进行切换,分时执行二者的代码。
  3. main线程和MyThread线程共享堆内存和方法区,可以实现数据交互。
  4. 线程的调度顺序由操作系统决定,无法由Java代码直接控制。

所以,理解线程的工作原理可以帮助我们更好的编写多线程程序,充分利用CPU资源。