博客
关于我
Java线程状态完全解析教程
阅读量:667 次
发布时间:2019-03-15

本文共 2866 字,大约阅读时间需要 9 分钟。

setState 的λης statewide method of Thread class in Java determines the current state of a thread. Thread has six possible states: NEW, RUNNABLE, BLOCKED, WAITING, TIME_WAITING, and TERMINATED. This article explains these states, their transitions, and how to control thread states through Thread APIs.

1. State Definitions

  • NEW: Created thread before calling start()
  • RUNNABLE: Ready to execute (justified as a combination of ready and running states)
  • BLOCKED:_Thread waiting on a lock (synchronized)
  • WAITING: Thread waiting for a notification
  • TIME_WAITING: Waiting for timeout
  • TERMINATED:Thread finished execution

Understanding these states helps in managing concurrent applications effectively.

2. Thread State Transitions

1. Initial State (NEW)

Upon creating a thread, it enters the NEW state. To switch to runnable, call start(). This transition is immediate upon start() invocation.

2. Runnable State

  • Thread enters RUNNABLE state after visible thread selection by scheduler

3. Blocked State

  • Thread acquires a lock via synchronized keyword
  • Blocked until lock release by another thread

4. Waiting State

  • Thread calls wait() and releases lock
  • Blocks until notify() is called
  • No CPU time allocated

5. Time-Waiting State

  • Thread calls wait(time) with timeout specified
  • Release lock and waits until timeout or notify
  • No CPU time allocated

6. Terminated State

  • Normal completion of run()-Abnormal exit due to uncaught exceptions
  • main thread exit

3. State Transitions and Execution

Ordered States: NEW → RUNNABLE → ... → TERMINATED

  • States before RUNNABLE are immutable; cannot skip
  • States after RUNNABLE can backtrack

Avoid direct state transitions where not possible; follow APIs for state changes.

4. Thread State Examples

Example usage of wait() and notify():

public class WaitingExample implements Runnable {public static void main(String[] args) {WaitingExample Reversible = new WaitingExample();Thread t1 = new Thread(Reverable);Thread t2 = new Thread(Reverable);t1.start();t2.start();try {Thread.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("t1:" + t1.getState());System.out.println("t2:" + t2.getState());try {Thread.sleep(1400);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("t1:" + t1.getState());System.out.println("t2:" + t2.getState());}@Overridepublic void run() {method();}private synchronized void method() {try {Thread.sleep(1000);wait();} catch (InterruptedException e) {e.printStackTrace();}}}

5. Tips for Writing Lightweight Code

  • Avoid unnecessary locks
  • Optimize sleep durations
  • Consider thread pooling for better resource utilization
  • Minimize long waits

6. Summary

Understanding thread states helps manage concurrent applications effectively. Use Thread API methods to control state transitions and design thread-safe code carefully. Avoid over-engineering; keep code simple and efficient.

转载地址:http://bafqz.baihongyu.com/

你可能感兴趣的文章
opencv笔记(1):图像缩放
查看>>
opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
查看>>
OpenCV计算点到直线的距离 数学法
查看>>
Opencv识别图中人脸
查看>>
OpenCV读写avi、mpeg文件
查看>>
opencv面向对象设计初探
查看>>
OpenCV(1)读写图像
查看>>
OpenCV:不规则形状区域中每种颜色的像素数?
查看>>
OpenCV:概念、历史、应用场景示例、核心模块、安装配置
查看>>
OpenDaylight融合OpenStack架构分析
查看>>
OpenERP ORM 对象方法列表
查看>>
openEuler Summit 2022 成功举行,开启全场景创新新时代
查看>>
openEuler 正式开放:推动计算多样化时代的到来
查看>>
OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
查看>>
OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
查看>>
OpenFeign 入门与实战
查看>>
OpenFeign源码学习
查看>>
OpenFeign组件声明式服务调用
查看>>
openfeign远程调用不起作用解决_使用Spring Boot的spring.factories进行注入---SpringCloud Alibaba_若依微服务框架改造---工作笔记007
查看>>
openfire开发(四)消息拦截器
查看>>