参考答案:
线程(Thread)是操作系统中能够独立执行任务的最小单位。它是进程(Process)的一部分,每个进程至少包含一个线程,称为主线程。线程通过操作系统的线程调度机制执行程序代码,并共享进程中的资源(如内存、文件描述符等)。多个线程在同一进程中并发执行,可以提高程序的执行效率和响应能力。
进程与线程的关系
线程的特点
线程的状态 线程的生命周期通常有以下几种状态:
线程的创建与管理
Thread
类或实现 Runnable
接口来创建。Thread
类表示一个线程,提供了线程的生命周期管理方法,如 start()
、run()
、sleep()
、join()
等。Runnable
接口则表示一个任务,可以通过 Thread
对象的构造函数将其包装成线程。Thread
类创建线程1class MyThread extends Thread { 2 @Override 3 public void run() { 4 System.out.println("Thread is running"); 5 } 6} 7 8public class ThreadExample { 9 public static void main(String[] args) { 10 MyThread thread = new MyThread(); 11 thread.start(); // 启动线程 12 } 13}
Runnable
接口创建线程1class MyRunnable implements Runnable { 2 @Override 3 public void run() { 4 System.out.println("Thread is running"); 5 } 6} 7 8public class ThreadExample { 9 public static void main(String[] args) { 10 MyRunnable task = new MyRunnable(); 11 Thread thread = new Thread(task); 12 thread.start(); // 启动线程 13 } 14}
synchronized
:用于方法或代码块,保证同一时刻只有一个线程能够访问该代码块。java.util.concurrent.locks
包提供了比 synchronized
更灵活的锁机制。java.util.concurrent.atomic
包提供的原子类(如 AtomicInteger
)实现对基本类型的原子操作。synchronized
保证线程同步1class Counter { 2 private int count = 0; 3 4 // 使用synchronized保证线程安全 5 public synchronized void increment() { 6 count++; 7 } 8 9 public synchronized int getCount() { 10 return count; 11 } 12} 13 14public class ThreadSyncExample { 15 public static void main(String[] args) throws InterruptedException { 16 Counter counter = new Counter(); 17 18 // 创建多个线程 19 Thread t1 = new Thread(() -> { 20 for (int i = 0; i < 1000; i++) { 21 counter.increment(); 22 } 23 }); 24 25 Thread t2 = new Thread(() -> { 26 for (int i = 0; i < 1000; i++) { 27 counter.increment(); 28 } 29 }); 30 31 t1.start(); 32 t2.start(); 33 34 // 等待线程执行完毕 35 t1.join(); 36 t2.join(); 37 38 System.out.println("Count: " + counter.getCount()); 39 } 40}
线程调度是操作系统管理多个线程并决定哪个线程在何时执行的过程。线程调度的主要任务是合理分配 CPU 时间给不同的线程,以提高系统的响应能力和资源利用率。常见的调度策略有:
为了避免频繁创建和销毁线程带来的性能开销,Java 提供了 线程池(Thread Pool) 机制。线程池是一个包含多个线程的容器,线程池中的线程可以重复使用,执行完任务后不会销毁,而是返回线程池等待执行下一个任务。
Java 提供了 ExecutorService
接口及其实现类,如 ThreadPoolExecutor
和 ScheduledThreadPoolExecutor
,用来管理线程池。
ExecutorService
创建线程池1import java.util.concurrent.ExecutorService; 2import java.util.concurrent.Executors; 3 4public class ThreadPoolExample { 5 public static void main(String[] args) { 6 // 创建一个固定大小的线程池 7 ExecutorService executorService = Executors.newFixedThreadPool(3); 8 9 // 提交任务给线程池 10 for (int i = 0; i < 5; i++) { 11 executorService.submit(() -> { 12 System.out.println(Thread.currentThread().getName() + " is executing the task."); 13 }); 14 } 15 16 // 关闭线程池 17 executorService.shutdown(); 18 } 19}
最近更新时间:2024-12-12