Thread类是Java并发编程的基础,其核心方法包括start()(启动线程)、run()(定义任务逻辑)、sleep()(暂停线程)、join()(等待线程结束)、interrupt()(请求中断)、isInterrupted()和interrupted()(检查中断状态)、isAlive()和getState()(获取线程状态)。这些方法共同管理线程的生命周期与行为。线程状态从NEW到TERMINATED共六种:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED,理解状态转换有助于调试和优化并发程序。interrupt()提供协作式中断机制,通过设置中断标志并由线程自身响应,确保安全退出,避免stop()带来的资源泄露和数据不一致问题。常见误区包括误调run()代替start()、忽略InterruptedException处理、滥用sleep()同步、join()导致死锁、过度依赖isAlive()等。最佳实践强调使用start()启动线程、正确处理中断、用高级并发工具替代手动线程管理,并保持run()方法简洁。尽管java.util.concurrent工具更推荐使用,但深入掌握Thread类仍是理解并发编程的基石。

Java的
Thread
当我们谈论
Thread
start()
run()
run()
start()
run()
Thread
Runnable
run()
start()
run()
start()
sleep(long millis)
sleep(long millis, int nanos)
TIMED_WAITING
sleep()
InterruptedException
join()
join(long millis)
join()
interrupt()
interrupt()
interrupted
sleep()
wait()
join()
InterruptedException
stop()
isInterrupted()
Thread.interrupted()
isInterrupted()
Thread.interrupted()
isAlive()
true
NEW
getState()
getState()
Thread.State
NEW
Runnable
BLOCKED
WAITING
TIMED_WAITING
TERMINATED
Java线程的生命周期,就像一场精心编排的舞台剧,每个线程都会经历一系列状态的转换,从诞生到消亡。理解这些状态,是掌握多线程编程的关键,它能帮助你诊断问题,优化性能,避免那些令人头疼的并发错误。
一个线程大致会经历以下六种状态:
立即学习“Java免费学习笔记(深入)”;
new Thread()
start()
Runnable
synchronized
BLOCKED
Object.wait()
Thread.join()
LockSupport.park()
notify()
notifyAll()
WAITING
Thread.sleep(long millis)
Object.wait(long millis)
Thread.join(long millis)
LockSupport.parkNanos()
LockSupport.parkUntil()
run()
TERMINATED
理解这些状态如何转换至关重要。例如,一个
NEW
start()
Runnable
Runnable
BLOCKED
sleep()
wait()
join()
TIMED_WAITING
WAITING
Runnable
TERMINATED
在多线程编程中,我们经常需要停止一个正在运行的线程。但直接强制停止(比如已经废弃的
Thread.stop()
interrupt()
interrupt()
interrupt()
true
中断的两种响应方式:
抛出InterruptedException
sleep()
join()
wait()
interrupt()
InterruptedException
public class InterruptibleTask implements Runnable {
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " 开始执行...");
// 模拟一个长时间运行的任务,其中包含可中断操作
while (!Thread.currentThread().isInterrupted()) { // 检查中断标志
System.out.println(Thread.currentThread().getName() + " 正在工作...");
Thread.sleep(1000); // 可中断的阻塞方法
}
} catch (InterruptedException e) {
// 捕获到中断异常,表示线程被请求停止
System.out.println(Thread.currentThread().getName() + " 被中断了!进行清理...");
// 重要的:当InterruptedException被捕获时,中断标志会被清除(重置为false)
// 如果上层调用者也需要知道中断,通常会重新设置中断标志
Thread.currentThread().interrupt(); // 重新设置中断标志
} finally {
System.out.println(Thread.currentThread().getName() + " 任务结束。");
}
}
}
// 在主线程中:
// Thread worker = new Thread(new InterruptibleTask(), "Worker-Thread");
// worker.start();
// Thread.sleep(3000);
// worker.interrupt(); // 请求中断检查中断标志:如果线程没有执行任何可中断的阻塞操作,那么它需要周期性地检查自己的中断状态。这通常通过
Thread.currentThread().isInterrupted()
true
public class NonInterruptibleTask implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 开始执行非阻塞任务...");
while (!Thread.currentThread().isInterrupted()) { // 循环检查中断标志
// 模拟一些计算密集型或非阻塞的IO操作
System.out.println(Thread.currentThread().getName() + " 正在进行计算...");
// 假设这里有一些耗时但不会抛出InterruptedException的代码
try {
Thread.sleep(500); // 即使有sleep,这里也演示非阻塞逻辑
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName() + " 收到中断请求,但继续执行非阻塞部分...");
Thread.currentThread().interrupt(); // 重新设置中断标志
break; // 或者选择退出
}
}
System.out.println(Thread.currentThread().getName() + " 非阻塞任务结束。");
}
}为什么Thread.stop()
Thread.stop()
stop()
Thread
多线程编程充满挑战,即使是
Thread
直接调用run()
start()
new Thread(myRunnable).run()
run()
myRunnable
thread.start()
start()
run()
忽略InterruptedException
InterruptedException
InterruptedException
Thread.currentThread().interrupt()
InterruptedException
使用sleep()
Thread.sleep(someMillis)
sleep()
Object.wait()
notify()
java.util.concurrent
Condition
ScheduledExecutorService
join()
join()
join()
join()
join(long millis)
过度依赖isAlive()
isAlive()
isAlive()
Runnable
BLOCKED
WAITING
thread.getState()
Thread.State
在run()
run()
run()
run()
总的来说,虽然
Thread
java.util.concurrent
ExecutorService
Future
CompletableFuture
CountDownLatch
CyclicBarrier
Thread
以上就是Java中Thread类常用方法解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号