当前位置: 首页 > web >正文

Java中线程的常用方法

在 Java 中,线程(Thread)是并发编程的核心,以下是线程的常用方法及其说明:


1. 线程创建与启动

  • Thread(Runnable target)
    构造方法,传入 Runnable 实现对象。
  • void start()
    启动线程,JVM 会自动调用 run() 方法(只能调用一次)。
Thread thread = new Thread(() -> System.out.println("线程运行"));
thread.start(); // 启动线程

2. 线程生命周期控制

  • static void sleep(long millis)
    当前线程休眠指定毫秒(不释放锁),需处理 InterruptedException
    Thread.sleep(1000); // 休眠1秒
    
  • void join() / void join(long millis)
    等待该线程终止(或最多等待 millis 毫秒)。
    thread.join(); // 主线程等待thread执行完毕
    
  • static void yield()
    提示调度器让出当前线程的 CPU 使用权(实际效果取决于 JVM 实现)。
  • void interrupt()
    中断线程(设置中断标志),若线程在 wait/sleep/join 中会抛出 InterruptedException
  • boolean isInterrupted()
    检测线程是否被中断(不清除中断状态)。
  • static boolean interrupted()
    检测当前线程是否被中断(清除中断状态)。

3. 线程状态与属性

  • Thread.State getState()
    获取线程状态(NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED)。
    Thread.State state = thread.getState();
    
  • void setName(String name) / String getName()
    设置/获取线程名称。
  • void setPriority(int priority) / int getPriority()
    设置/获取优先级(1~10,默认 5)。
  • void setDaemon(boolean on) / boolean isDaemon()
    设置/判断是否为守护线程(JVM 在所有非守护线程结束时退出)。

4. 对象锁与线程通信(在 synchronized 块内使用)

  • void wait()
    释放锁,使当前线程等待,直到其他线程调用 notify()/notifyAll()
  • void notify()
    随机唤醒一个等待该对象锁的线程。
  • void notifyAll()
    唤醒所有等待该对象锁的线程。
synchronized (lock) {while (conditionNotMet) {lock.wait(); // 释放锁并等待}// ... 执行操作lock.notifyAll(); // 唤醒其他线程
}

5. 其他实用方法

  • static Thread currentThread()
    获取当前正在执行的线程对象。
    Thread current = Thread.currentThread();
    
  • long getId()
    获取线程的唯一 ID。
  • StackTraceElement[] getStackTrace()
    获取线程的堆栈跟踪信息(用于调试)。

重要注意事项

  1. 废弃方法
    避免使用 stop(), suspend(), resume()(已废弃,可能导致死锁或数据不一致)。
  2. 中断机制
    使用 interrupt() 协作式中断线程,而非强制终止。
  3. 守护线程
    守护线程(如 GC)会在所有非守护线程结束时自动终止。
  4. 线程安全
    优先使用 java.util.concurrent 包(如 ExecutorService, Lock, Atomic 类)代替原生同步。

示例:基础线程操作

public class ThreadDemo {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {try {Thread.sleep(2000);System.out.println("子线程结束");} catch (InterruptedException e) {e.printStackTrace();}});t.start();System.out.println("线程状态: " + t.getState()); // RUNNABLEt.join(); // 主线程等待t结束System.out.println("线程状态: " + t.getState()); // TERMINATED}
}

掌握这些方法能有效管理线程生命周期和同步,但实际开发中建议使用高级并发工具(如线程池)提升性能和可维护性。

http://www.xdnf.cn/news/12962.html

相关文章:

  • 6月8日python-AI代码
  • RPG23.应用武器伤害(一):设置武器命中
  • AD学习(2)
  • 深入理解链接与加载:从静态库到动态库的全流程解析
  • OD 算法题 B卷【反转每对括号间的子串】
  • Java设计模式面试题详解
  • 第十二讲 | 二叉搜索树
  • 庖丁解java(一篇文章学java)
  • 风控系统中常用的概念和架构学习
  • golang循环变量捕获问题​​
  • Ⅱ.楔子 -- C♭和 cbc
  • 经典算法:排序链表
  • DQN算法(详细注释版)
  • 开源项目实战学习之YOLO11:12.7 ultralytics-models-transformer.py
  • SpringMVC简介
  • 【GPT模型训练】第一课:安装PyTorch环境
  • PandasAI使用
  • Doris-2:单虚拟机上非docker化安装Doris实验环境
  • 万利达电动机保护器接ModbusRTU转profibusDP网关与300PLC通讯
  • 2025-06-02-数据库的分类和应用
  • 大数据(3) 分布式文件系统HDFS
  • LeetCode 2894.分类求和并作差
  • 什么是函数对象
  • 【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具
  • 并发请求函数batchRequests
  • 类加载的过程
  • 【算法笔记】树套树
  • RSA和AES算法核心区别和原理解析
  • Python地理数学可视化:基于函数生成真实感地形
  • WebFuture 升级提示“不能同时包含聚集KEY和大字段””的处理办法