今日重点学习了Java中的多线程编程,这是现代编程中实现并发和提高程序性能的关键技术。多线程可以让程序同时执行多个任务,充分利用计算机的多核处理器资源,提升程序的执行效率和响应速度。
线程是程序执行的最小单位,是操作系统能够进行调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文件句柄等。在Java中,线程的实现主要依赖于Thread类和Runnable接口。
Thread类:是Java中表示线程的类,它提供了创建和控制线程的方法。通过继承Thread类并重写run方法,可以定义线程的执行体。例如:
java
public class MyThread extends Thread {
@Override
public void run() {
// 线程执行的任务
System.out.println("线程正在运行");
}
}
创建并启动线程:
java
MyThread myThread = new MyThread();
myThread.start(); // 启动线程,执行run方法
Runnable接口:是一个函数式接口,它定义了一个run方法,用于表示线程的任务。通过实现Runnable接口,可以将线程的任务与线程的控制分离,使线程任务可以独立于线程的调度和执行。例如:
java
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程执行的任务
System.out.println("线程正在运行");
}
}
创建并启动线程:
java
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start(); // 启动线程,执行run方法
Java中的线程有多种状态,包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)。线程在执行过程中会在这几种状态之间转换。
新建状态:线程对象被创建后,处于新建状态。此时线程尚未启动,不能执行任何任务。
就绪状态:线程调用start方法后,进入就绪状态。此时线程已经具备了运行条件,但还没有获得CPU的执行权,等待操作系统调度。
运行状态:线程获得CPU的执行权后,进入运行状态。此时线程正在执行run方法中的任务。
阻塞状态:线程在执行过程中,可能会因为某些原因(如等待资源、执行同步代码块等)而进入阻塞状态。处于阻塞状态的线程暂时无法获得CPU的执行权,需要等待特定条件满足后才能重新进入就绪状态。
等待状态:线程调用wait方法后,进入等待状态。此时线程需要等待其他线程的通知(通过notify或notifyAll方法)才能继续执行。
终止状态:线程执行完毕或因异常退出后,进入终止状态。此时线程已经完成了它的生命周期,不能再次启动。