线程(Thread)是进程内的一条执行路径,它是CPU调度和执行的基本单位。一个进程可以包含多条线程,线程共享进程的堆和方法区资源。
线程的工作原理是:
- 当我们启动一个线程时,真正执行的是线程对应的run()方法或target中的代码。
- CPU可以在多个线程之间快速切换,以提高CPU利用率。这种切换被称为线程的上下文切换。
- 线程可以访问共享的堆内存和方法区,实现线程之间的数据交互和通信。
- 线程的调度由操作系统的线程调度器完成,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
...
在该示例中:
- main线程调用start()启动MyThread线程。
- CPU开始在main线程和MyThread线程之间进行切换,分时执行二者的代码。
- main线程和MyThread线程共享堆内存和方法区,可以实现数据交互。
- 线程的调度顺序由操作系统决定,无法由Java代码直接控制。
所以,理解线程的工作原理可以帮助我们更好的编写多线程程序,充分利用CPU资源。