八股-线程

线程

状态流转

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 服务器、应用服务器需要并发处理大量客户端请求