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()
获取线程的堆栈跟踪信息(用于调试)。
重要注意事项
- 废弃方法:
避免使用stop()
,suspend()
,resume()
(已废弃,可能导致死锁或数据不一致)。 - 中断机制:
使用interrupt()
协作式中断线程,而非强制终止。 - 守护线程:
守护线程(如 GC)会在所有非守护线程结束时自动终止。 - 线程安全:
优先使用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}
}
掌握这些方法能有效管理线程生命周期和同步,但实际开发中建议使用高级并发工具(如线程池)提升性能和可维护性。