八股-线程
线程
状态流转
Java 在 Thread 类中通过 State 枚举定义了六种线程状态:
- NEW(新建):线程对象被创建后的初始状态
- RUNNABLE(就绪/运行):调用
start()后进入此状态,包含操作系统层面的就绪态和运行态,线程等待 CPU 调度或正在执行 - BLOCKED(阻塞):线程在运行中尝试获取同步锁失败时进入,等待锁释放
- WAITING(等待):线程执行
wait()或join()等无超时参数的方法后进入,需等待其他线程唤醒 - TIMED_WAITING(计时等待):线程执行
sleep()、wait(timeout)或join(timeout)等带超时参数的方法后进入,超时自动唤醒或提前被唤醒 - TERMINATED(结束):线程的
run()方法执行完毕或抛出未捕获异常后进入,生命周期结束
创建线程的方式
- 继承
Thread类,重写run()方法 - 实现
Runnable接口,将实例作为参数创建Thread对象 - 实现
Callable接口,配合FutureTask包装器使用,适用于需要获取返回结果或抛出受检异常的任务 - 通过线程池(
ExecutorService)创建和管理线程,实现线程复用
多线程的应用场景
- 耗时操作处理:大文件拷贝迁移、批量资源文件加载等阻塞式 IO 操作
- 网络通信软件:即时通讯、聊天软件需要同时维护多个连接并处理并发消息
- 后台服务端程序:Web 服务器、应用服务器需要并发处理大量客户端请求