Java多线程编程基础之线程和多线程(Java多线程编程入门:线程与多线程基础详解)
原创
一、线程的基本概念
在Java中,线程是程序执行的基本单元。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。Java提供了Thread类来拥护线程的创建和管理。
二、创建线程的两种方法
Java提供了两种创建线程的方法:通过继承Thread类和实现Runnable接口。
1. 继承Thread类
public class MyThread extends Thread {
@Override
public void run() {
// 线程执行的代码
}
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
2. 实现Runnable接口
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程执行的代码
}
}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
三、线程的生命周期
线程的生命周期关键分为以下几个状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Terminated)。
- 新建:当创建一个线程时,它处于新建状态。此时线程尚未分配必要的资源。
- 就绪:线程调用start()方法后,进入就绪状态。此时线程已经准备好执行,等待CPU的调度。
- 运行:线程获取CPU资源后,进入运行状态。此时线程执行其run()方法中的代码。
- 阻塞:线程在执行过程中,因等待某些资源或条件而无法继续执行,进入阻塞状态。当资源或条件满足时,线程重新进入就绪状态。
- 死亡:线程执行完毕或因异常退出,进入死亡状态。此时线程已经终结,不再参与调度。
四、线程的同步
多线程环境下,多个线程大概同时访问共享资源,促使数据不一致或竞态条件。为了解决这个问题,Java提供了同步机制。
1. 同步方法
public synchronized void synchronizedMethod() {
// 同步代码块
}
2. 同步代码块
public void synchronizedBlock() {
synchronized (this) {
// 同步代码块
}
}
五、线程的通信
线程间的通信可以通过wait()、notify()和notifyAll()这三个方法实现。这三个方法属于Object类,故而所有Java对象都可以作为锁来使用。
1. wait()方法
当一个线程调用对象的wait()方法时,该线程进入等待状态,等待其他线程调用该对象的notify()或notifyAll()方法。
public void waitMethod() throws InterruptedException {
synchronized (this) {
this.wait();
}
}
2. notify()方法
当一个线程调用对象的notify()方法时,它会唤醒在该对象上等待的一个线程。
public void notifyMethod() {
synchronized (this) {
this.notify();
}
}
3. notifyAll()方法
当一个线程调用对象的notifyAll()方法时,它会唤醒在该对象上等待的所有线程。
public void notifyAllMethod() {
synchronized (this) {
this.notifyAll();
}
}
六、线程池
线程池是一种管理线程的工具,它可以复用已创建的线程,减少线程创建和销毁的开销。Java提供了Executor框架来拥护线程池的使用。
1. 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
2. 提交任务
executorService.submit(new Runnable() {
@Override
public void run() {
// 执行任务
}
});
3. 关闭线程池
executorService.shutdown();
七、总结
本文详细介绍了Java多线程编程的基础知识,包括线程的创建、生命周期、同步、通信和线程池。掌握这些知识对于编写高效、稳定的多线程程序至关重要。