java中线程的生命周期

Understanding Thread Life Cycle in Java and Thread States are very important when you are working with Threads and programming for multithreaded environment.

使用线程和针对多线程环境进行编程时,了解Java线程状态下的 线程生命周期非常重要。

From our last tutorial, we can create a java thread class by implementing Runnable interface or by extending Thread class, but to start a java thread, we first have to create the Thread object and call it’s start() method to execute run() method as a thread.

从我们过去的教程中,我们可以创建一个Java线程通过实现Runnable接口或者扩展Thread类的类,但启动Java线程,我们首先必须创建Thread对象并调用它的start()方法来执行run()方法作为线程。

Java中的线程生命周期 (Thread Life Cycle in Java)

Below diagram shows different states of thread life cycle in java. We can create a thread in java and start it but how the thread states change from Runnable to Running to Blocked depends on the OS implementation of thread scheduler and java doesn’t have full control on that.

下图显示了Java中线程生命周期的不同状态。 我们可以在Java中创建一个线程并启动它,但是线程状态如何从Runnable更改为Running到Blocked取决于线程调度程序的OS实现,而Java对此没有完全控制。

新 (New)

When we create a new Thread object using new operator, thread state is New Thread. At this point, thread is not alive and it’s a state internal to Java programming.

当我们使用new运算符创建新的Thread对象时,线程状态为New Thread。 在这一点上,线程还没有激活,它是Java编程内部的一种状态。

可运行 (Runnable)

When we call start() function on Thread object, it’s state is changed to Runnable. The control is given to Thread scheduler to finish it’s execution. Whether to run this thread instantly or keep it in runnable thread pool before running, depends on the OS implementation of thread scheduler.

当我们在Thread对象上调用start()函数时,它的状态更改为Runnable。 将控制权交给线程调度程序以完成其执行。 是立即运行此线程还是在运行之前将其保留在可运行线程池中,取决于线程调度程序的OS实现。

跑步 (Running)

When thread is executing, it’s state is changed to Running. Thread scheduler picks one of the thread from the runnable thread pool and change it’s state to Running. Then CPU starts executing this thread. A thread can change state to Runnable, Dead or Blocked from running state depends on time slicing, thread completion of run() method or waiting for some resources.

线程执行时,其状态更改为正在运行。 线程调度程序从可运行线程池中选择一个线程,并将其状态更改为“正在运行”。 然后,CPU开始执行该线程。 线程可以将时间从运行状态更改为Runnable,Dead或Blocked,这取决于时间切片,run()方法的线程完成或等待某些资源。

封锁/等待 (Blocked/Waiting)

A thread can be waiting for other thread to finish using thread join or it can be waiting for some resources to available. For example producer consumer problem or waiter notifier implementation or IO resources, then it’s state is changed to Waiting. Once the thread wait state is over, it’s state is changed to Runnable and it’s moved back to runnable thread pool.

一个线程可以等待其他线程使用线程连接完成,也可以等待一些可用资源。 例如生产者消费者问题或服务员通知程序实现或IO资源,则其状态更改为等待。 线程等待状态结束后,其状态将更改为Runnable,并将其移回可运行线程池。

死 (Dead)

Once the thread finished executing, it’s state is changed to Dead and it’s considered to be not alive.

线程执行完毕后,其状态将更改为Dead(死),并且认为该状态不活跃。

Above are the different states of thread. It’s good to know them and how thread changes it’s state. That’s all for thread life cycle in java.

以上是线程的不同状态 。 了解它们以及线程如何更改其状态非常好。 这就是Java中线程生命周期的全部内容。

翻译自: https://www.journaldev.com/1044/thread-life-cycle-in-java-thread-states-in-java

java中线程的生命周期

java中线程的生命周期_Java中的线程生命周期– Java中的线程状态相关推荐

  1. java swing单选按钮点击事件_java Swing中点击不同单选按钮JPanel中部分区域进行改变,如何实现?。。急啊!...

    展开全部 public class NewJFrame extends javax.swing.JFrame { /** Creates new form NewJFrame */ public Ne ...

  2. java线程挂起唤醒_JAVA并发(10)—interrupt唤醒挂起线程

    1.1 中断方法 在独占锁加锁过程中,我们看到,线程进入sync queue中后便调用park()方法将自己挂起.等待其他线程调用unpark()方法唤醒自己.那么当我们调用interrupt()方法 ...

  3. java线程如何避免死锁_Java面试问题,如何避免Java线程中的死锁?

    如何避免Java中的死锁?是流行的Java面试问题之一,也是多线程的流行话题之一.尽管问题看起来很简单,但是一旦深入,大多数Java开发人员就会陷入困境. 面试问题以"什么是死锁?" ...

  4. Java布局怎么加图片组件_java – 将图像缩略图添加到网格中的布局...

    所以基本上,你需要一些存在于滚动窗格中的容器(通常称为视图). 为此你应该添加你的图像. import java.awt.BorderLayout; import java.awt.Component ...

  5. java怎么更改目标文件夹_java – IntelliJ无法同步目标文件夹中的更改

    Linux Mint 13上的Intellij 12.0.4(build 123.169). 当我从命令行运行maven测试时,我可以在文件资源管理器中看到目标文件夹的更改内容,但在IntelliJ中 ...

  6. java向kafka推送数据_Java编写程序将数据存入Kafka中

    Kafka是一个类似于RabbitMQ的消息系统,它的主要功能是消息的发布和订阅.处理和存储. 1.它类似于一个消息系统,读写流式的数据. 2.编写可扩展的流应用处理程序,用于实时事件响应的场景. 3 ...

  7. java判断输入值是否在数组_java判断特定值是否在数组中的方法

    java判断特定值是否在数组中的方法: 使用List:public static boolean useList(String[] arr, String targetValue) { return ...

  8. java出现次数最多的数_java如何找出一个int数组中出现次数最多

    展开全部 其实这个问题,涉及到两个过程首先是统计数组中数字出现的次数,应该要有类32313133353236313431303231363533e78988e69d8331333365636666似& ...

  9. java中怎样验证重复文件_java – 如何在下载之前检查URL中的重复文件

    如果您有基本URL并存储具有相同文件名的文件.由于文件修改时间和If-Modified-Since HTTP Header,您可以询问服务器是否值得再次下载映像. File f = new File( ...

  10. java不看答案不会_Java新手必备:20道java基础面试题,不看答案你会几道题?

    1.面向对象的特征有哪些方面? [基础] 答:面向对象的特征主要有以下几个方面: 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题, ...

最新文章

  1. 线性代数笔记:Hadamard积
  2. dsp广告和信息流广告区别_一文搞懂DSP-蘑菇街DSP广告实践
  3. Android—View事件分发与View子类
  4. python函数返回none_Python 函数默认返回None的原因
  5. Python---实验九作业
  6. 29 | 如何判断一个数据库是不是出问题了?
  7. OData 1-2 windows 身份验证和OData
  8. 【T-SQL基础】02.联接查询
  9. vxworks驱动开发基础
  10. WordPress伪原创工具-更新网站一键伪原创发布软件
  11. 版式设计优秀作品欣赏_垂直版式的垂直作品设计探索
  12. 关于动态网站制作的一些疑惑
  13. Unity3D游戏开发之自由视角状态下的角色控制
  14. 小心被举报!考研复试后不要分享考试内容!
  15. H264码流中SPS的获取
  16. 苹果系统中英文输入法切换_Mac 一键切换中英输入法方案
  17. 计算机cpu的字母,买电脑如何识别CPU后面数字和字母的含义?不被忽悠呢?
  18. 去哪儿网2023正式秋招啦,来这里可以内推
  19. Integer127==127结果为true为什么Integer128==128结果为false?
  20. 三次创业失败,现在好好工作,为下次崛起再努力。没什么好怕的,哈哈,活了半辈子,总结一句:要么忙着生,要忙着死。

热门文章

  1. [转载] Python——摄氏温度转换华氏温度
  2. [转载] python的短逻辑
  3. 自然语言处理真实项目实战(20170822)
  4. sqlserver 中怎样查看一个数据库中表的关系
  5. 设计模式练习:Decorate模式
  6. python--之Python内存监控模块memory_profiler测试
  7. 3D MRI brain tumor segmentation using autoencoder regularization
  8. PCD Lesson3:PCD文件的读取
  9. VScode编辑同步Markdown文档到印象笔记
  10. php扩展介绍,初步介绍PHP扩展开发经验分享