0

0

深入研究Java线程的几种状态及其对程序执行的影响

PHPz

PHPz

发布时间:2024-02-21 23:27:04

|

1229人浏览过

|

来源于php中文网

原创

深入研究java线程的几种状态及其对程序执行的影响

深入研究Java线程的几种状态及其对程序执行的影响

在Java中,线程是一种轻量级的执行单位,可以在程序中独立运行并执行特定的任务。线程的状态是描述线程在执行过程中的不同阶段,了解线程的状态对于编写多线程程序以及优化程序性能非常重要。本文将深入研究Java线程的几种状态以及它们对程序执行的影响,并提供具体的代码示例。

Java线程的几种状态包括:NEW(新建)、RUNNABLE(可运行)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING(定时等待)和TERMINATED(终止)。

  1. 新建(NEW)状态:当通过创建Thread类的实例来新建一个线程时,线程处于新建状态。在新建状态中,线程尚未开始运行任何代码。下面是一个创建新线程的示例代码:
Thread thread = new Thread(() -> {
    System.out.println("Hello, World!");
});
  1. 可运行(RUNNABLE)状态:当线程调用start()方法后,线程将进入可运行状态。在这个状态下,线程将等待CPU分配时间片,以便执行run()方法中的代码。如果有多个线程处于可运行状态,操作系统会根据调度策略为这些线程分配时间片。下面是一个示例代码:
Thread thread = new Thread(() -> {
    System.out.println("Hello, World!");
});
thread.start();
  1. 阻塞(BLOCKED)状态:当线程因为某些原因不能继续执行时,线程将进入阻塞状态。常见的原因包括等待锁、等待输入输出(I/O)等。在阻塞状态中,线程暂停执行,直到满足某个条件后才能继续执行。下面是一个使用synchronized关键字来实现线程同步的示例代码:
public class MyRunnable implements Runnable {
    private Object lock = new Object();
    
    public void run() {
        synchronized(lock) {
            System.out.println("In synchronized block");
            // 一些代码
        }
    }
  
    public static void main(String[] args) {
        MyRunnable runnable = new MyRunnable();
        Thread thread1 = new Thread(runnable);
        Thread thread2 = new Thread(runnable);
  
        thread1.start();
        thread2.start();
    }
}

在上述代码中,两个线程尝试同时进入synchronized块,因为锁是共享的,所以第二个线程将进入阻塞状态,直到第一个线程执行完毕释放锁。

立即学习Java免费学习笔记(深入)”;

OneAI
OneAI

将生成式AI技术打包为API,整合到企业产品和服务中

下载
  1. 等待(WAITING)状态:线程在以下情况下会进入等待状态:调用了wait()方法、调用了join()方法或者调用了LockSupport的park()方法。在等待状态中,线程不会主动执行任何代码,直到其他线程唤醒它或者等待时间到达。下面是一个使用wait()方法的示例代码:
public class MyThread extends Thread {
    public void run() {
        synchronized(this) {
            System.out.println("Waiting for next thread...");
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread resumed.");
        }
    }
  
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
  
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        synchronized(thread) {
            thread.notify();
        }
    }
}

在上述代码中,线程进入等待状态后,主线程通过notify()方法唤醒了该线程。

  1. 定时等待(TIMED_WAITING)状态:线程在以下情况下会进入定时等待状态:调用了sleep()方法、调用了带有超时参数的join()方法、调用了带有超时参数的wait()方法、调用了LockSupport的parkNanos()方法或者parkUntil()方法。在定时等待状态中,线程不会主动执行任何代码,等待时间到达后将被唤醒。下面是一个使用sleep()方法的示例代码:
public class MyThread extends Thread {
    public void run() {
        try {
            System.out.println("Thread sleeping...");
            Thread.sleep(2000);
            System.out.println("Thread woke up.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
  
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

在上述代码中,线程通过调用sleep()方法进入定时等待状态,并等待2秒后被唤醒。

  1. 终止(TERMINATED)状态:线程执行完run()方法中的代码后,线程将进入终止状态。在终止状态中,线程将不再运行。

综上所述,线程的状态对于程序的执行有着重要的影响。了解各种状态以及其含义对于编写高效的多线程程序至关重要。

参考资料:

  • Oracle官方文档 - Java线程状态:https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.State.html
  • Java多线程入门教程:https://www.journaldev.com/1162/java-thread-tutorial

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

764

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

376

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

30

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

29

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

103

2026.02.06

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

376

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

30

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

29

2026.01.21

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2.1万人学习

Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号