《JAVA八股真解》三、线程与锁
#JAVA##JAVA面经##JAVA内推#
1. 线程的状态
Java中的线程生命周期由Thread类的getState()方法返回,共有六种状态:
| 状态 | 说明 |
|---|---|
| NEW(新建) | 线程刚被创建但尚未启动,处于初始状态。 |
| RUNNABLE(运行中) | 线程已启动并正在执行或准备执行任务。此状态包括“就绪”和“运行”两个阶段,取决于是否获取到CPU时间片。 |
| BLOCKED(阻塞) | 线程因等待锁而暂停执行,例如在synchronized代码块中无法获得锁时进入该状态。 |
| WAITING(等待) | 线程主动调用wait()、join()或LockSupport.park()等方法后进入无限期等待状态,直到被其他线程唤醒。 |
| TIMED_WAITING(计时等待) | 类似于WAITING,但等待时间有限,如调用sleep(long)、wait(long)、join(long)等方法后进入该状态。 |
| TERMINATED(终止) | 线程已完成执行,退出运行状态。 |
注意:线程从一个状态转换到另一个状态的过程是自动完成的,开发人员通常无需手动干预。
2. 创建线程的方式
Java提供了多种创建线程的方法,常见的有以下几种:
(1)继承Thread类
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running!");
}
}
// 使用
MyThread thread = new MyThread();
thread.start();
(2)实现Runnable接口
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Thread running!");
}
}
// 使用
Thread thread = new Thread(new MyRunnable());
thread.start();
(3)使用内部类
public class Main {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("Thread running!");
}
};
thread.start();
}
}
(4)使用Lambda表达式(JDK 8+)
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(() -> System.out.println("Thread running!"));
thread.start();
}
}
推荐:优先使用
Runnable或Callable接口,避免继承带来的单继承限制。
3. 线程池核心参数
线程池是管理线程资源的重要工具,通过复用线程减少创建开销,提升系统性能。ThreadPoolExecutor是线程池的核心实现类。
ThreadPoolExecutor(
int corePoolSize, // 核心线程数
int maximumPoolSize, // 最大线程数
long keepAliveTime, // 空闲线程存活时间
TimeUnit unit, // 时间单位
BlockingQueue<Runnable> workQueue, // 工作队列
ThreadFactory threadFactory, // 线程工厂
RejectedExecutionHandler handler // 拒绝策略
)
参数详解:
- corePoolSize:核心线程数,即使空闲也不会被回收。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【八股真解】精炼最新高频面经 文章被收录于专栏
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看9道真题和解析