第一部分:java.lang.Thread 类的核心方法

这是最基础、最直接的线程操作方法。

1. 线程生命周期管理
  • start()

    • 作用:启动一个新线程。JVM 会为该线程分配资源,并使其进入RUNNABLE状态,等待 CPU 调度执行。必须调用此方法才能真正启动线程,而不是直接调用run()方法。
    • 注意:一个线程对象只能调用一次start()方法,多次调用会抛出IllegalThreadStateException
  • run()

    • 作用:线程的执行体。当线程被 CPU 调度后,它会执行run()方法中的代码。
    • 注意:这是一个普通方法,直接调用它并不会创建新线程,只会在当前线程中串行执行。
  • join()

    • 作用:等待该线程终止。调用thread.join()的线程会进入WAITING状态,直到thread执行完毕。
    • 重载join(long millis):等待该线程终止的时间最长为millis毫秒。
  • yield()

    • 作用:暂停当前正在执行的线程对象,并执行其他线程。这是一个静态方法
    • 注意:这只是一个 “建议”,告诉调度器 “我愿意放弃当前的 CPU 资源”,但调度器不一定会采纳。它不会释放锁。
2. 线程信息获取与设置
  • getName() / setName(String name)

    • 作用:获取和设置线程的名称。
  • getPriority() / setPriority(int newPriority)

    • 作用:获取和设置线程的优先级。优先级范围是 1 到 10,默认是 5。
    • 注意:优先级高的线程获得 CPU 调度的概率更大,但不保证一定先执行。
  • getState()

    • 作用:获取线程的状态,返回一个Thread.State枚举值。
    • 状态包括NEWRUNNABLEBLOCKEDWAITINGTIMED_WAITINGTERMINATED
  • isAlive()

    • 作用:测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。
3. 线程中断机制
  • interrupt()

    • 作用:中断线程。这只是给线程设置一个 “中断标记”,并不会强制停止线程。
    • 行为
      • 如果线程正处于sleep()wait()join()等阻塞状态,会抛出InterruptedException,并清除中断标记。
      • 如果线程处于正常运行状态,只会设置中断标记,线程需要自己检查这个标记来决定是否停止。
  • isInterrupted()

    • 作用:测试线程是否已经被中断。不会清除中断标记。
  • interrupted() (静态方法)

    • 作用:测试当前线程是否已经被中断。会清除中断标记。
4. 守护线程 (Daemon Thread)
  • setDaemon(boolean on)

    • 作用:将该线程标记为守护线程或用户线程。
    • 注意:必须在调用start()方法之前设置。当 JVM 中只剩下守护线程时,JVM 会自动退出。
  • isDaemon()

    • 作用:测试该线程是否为守护线程。

第二部分:java.lang.Object 类的线程控制方法

所有对象都继承了这些方法,它们是实现线程间协作的基础。

  • wait()

    • 作用:让当前线程进入WAITING状态,并释放它持有的该对象的锁。
    • 注意:必须在synchronized方法或代码块中调用,否则会抛出IllegalMonitorStateException
  • wait(long timeout)

    • 作用:让当前线程进入TIMED_WAITING状态,并释放锁。如果在timeout毫秒内没有被唤醒,线程会自动醒来。
  • notify()

    • 作用:唤醒在此对象监视器上等待的单个线程。
    • 注意:同样必须在synchronized方法或代码块中调用。唤醒哪个线程是随机的。
  • notifyAll()

    • 作用:唤醒在此对象监视器上等待的所有线程。

第三部分:java.util.concurrent 包中的常用方法

这是现代 Java 并发编程的核心,提供了更强大、更安全的线程控制方式。

1. 线程池 (Executor Framework)
  • ExecutorService 接口的核心方法
    • submit(Callable<T> task) / submit(Runnable task):提交一个任务到线程池执行。
    • shutdown():平滑关闭线程池。不再接受新任务,但会等待已提交的任务执行完毕。
    • shutdownNow():立即关闭线程池。尝试停止所有正在执行的任务,并返回等待队列中未执行的任务列表。
    • awaitTermination(long timeout, TimeUnit unit):等待线程池在指定时间内终止。
2. Lock 与 Condition
  • Lock.lock() / lock.unlock()

    • 作用:替代synchronized关键字,提供更灵活的锁机制。必须在try...finally块中使用,确保锁一定被释放。
  • Condition.await() / condition.signal() / condition.signalAll()

    • 作用:替代Object.wait()notify()notifyAll()Condition对象由Lock对象创建,实现了更精确的线程间通信。
3. Future
  • future.get()

    • 作用:获取异步任务的执行结果。如果任务尚未完成,调用此方法的线程会阻塞,直到任务完成。
    • 重载get(long timeout, TimeUnit unit):在指定时间内等待结果,超时则抛出TimeoutException
  • future.cancel(boolean mayInterruptIfRunning)

    • 作用:尝试取消任务的执行。如果任务已完成或已取消,则失败。

总结表格

类别 方法签名 所属类 / 接口 核心作用
生命周期 start() Thread 启动新线程
run() Thread 线程执行体
join() Thread 等待线程终止
yield() Thread (static) 主动让出 CPU
中断 interrupt() Thread 中断线程(设置标记)
isInterrupted() Thread 检查中断状态(不清除)
interrupted() Thread (static) 检查当前线程中断状态(清除)
协作 (Object) wait() Object 等待,释放锁
notify() Object 唤醒单个等待线程
notifyAll() Object 唤醒所有等待线程
协作 (Lock) condition.await() Condition 等待,释放锁
condition.signal() Condition 唤醒单个等待线程
condition.signalAll() Condition 唤醒所有等待线程
线程池 executorService.submit() ExecutorService 提交任务
executorService.shutdown() ExecutorService 关闭线程池
Future future.get() Future 获取异步任务结果(阻塞)
future.cancel() Future 取消任务

这份总结涵盖了 Java 线程编程从基础到高级的绝大多数核心方法。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐