当前位置: 首页 > 网络应用技术

Java的6个线程状态和线程状态的转换

时间:2023-03-06 16:02:05 网络应用技术

  本文详细介绍了6的状态以及Java线程6之间的转换。

  本文基于JDK1.8。

  关于Java线程的状态,有许多在线语句,五个,六个甚至七个。本文使用Java的官方线程状态。

  实际上,该官员总共赋予了六个线程状态。让我们看一下源代码:

  可以从源代码中可以看出Java语言将6线程状态定义为线程类中的内部枚举。此外,我建议您使用这六个状态,当然,您也可以遵循自己的理解。。

  在任何时间点,只能可用一个线程,只有一个线程。六个州如下:

  官方为什么不将这两个状态分开?可能有可能在此运行和准备就绪之间的两个状态之间的线程长度太短。现代CPU使用旋转时间胶片调度。状态已合并为可运行的状态。

  补充:Java合并了操作系统中的操作系统,两个州合并为操作状态。

  阻止状态是输入同步关键字修改(获取锁定)时线程阻止的状态,但是java.concurrent软件包中锁定接口的线程状态正在等待,因为Java.concurrent in Java中的锁定接口.CRURNENT PACKAGEALL方法中的锁紧基金类方法用于阻塞性实现。

  当发生特定事件时,以上6个状态将相互转换。他们的转换关系如下:

  上图中状态的转换和方法已经很清楚。以下重点是几种状态和相关方法的转换。

  2.1.1.1等待方法的等待方法属于对象类。wait()方法允许当前线程暂停执行并释放锁定,以便其他线程可以输入同步数据块,并且当前线程将当前线程放在对象等待queue.wait()方法中,必须包含在相应的同步语句。无论是Wait())方法还是Notify()方法,都需要获得目标对象的监视器。

  当调用notify()方法时,请从对象的等待队列中删除任意线程,然后将其放入锁定 - 等待池中。对于该对象,将其放在锁定中,然后等待池。

  觉醒线程不会立即执行,而是尝试获取锁定,并且执行唤醒方法的线程不会立即释放锁定。

  2.1.1.2介绍联接方法加入方法使用内部的wait()方法等待。使用Wait()实现了底层以释放锁定。联接方法添加了同步关键字,因此使用Wait没有问题。

  联接方法的主要角色是同步,它可以使线程之间的并行执行到串行执行中,有些类似于同步操作效果。当螺纹B的Join()方法在线程A中调用时,仅在螺纹A中调用,这意味着只有当B线程执行可以继续执行。如果有多个线程,则除线程以外的其他线程竞争CPU并正常锁定。

  如果参数在JOIN方法中传递,则意味着这意味着:如果螺纹A中的线程B的联接(10),则表示线程A将等待B线程执行10毫秒。执行线程B,即JOIN(0)等效于JOIN()ESSENCE(实际上,Join(0)在JOIN()中调用()。当在主线程中调用JOIN时,主线程正在等待,并且有没有其他线程不需要彼此等待。

  JOIN()和同步之间的区别是:加入呼叫内部的wait()方法,而同步关键字将“对象监视器”的原理用作同步。

  2.1.2.1睡眠方法入睡方法简介在一段时间内暂停执行,以便其他线程有机会继续执行,但不会释放对象锁。换句话说,如果有同步同步快速,其他线程仍然无法访问共享数据。请注意此方法以捕获异常。Sleep将允许所有其他线程具有相同的电源CPU!

  如果您在睡眠期间被打断,您将在睡眠()中都会抛出一个中断的异常。

  当调用thread.sleep(long millis)时,负数将传递给Millis参数,并将抛出非法符号的Exception。

  2.1.2.2 locksupport类Locksupport的简介是线程阻止工具类。所有方法都是静态方法,允许线程在任何位置上阻塞。当然,阻止后必须有一个唤醒方法。

  常见方法:

  void park()阻止当前线。如果调用或中断了Unpark(线程)方法,则可以从Park().Void Parknanos(Long Nanos)返回它,将当前线阻塞,随着时间的推移返回,并且阻塞时间不超过Nanos nano seconds.void Parkuntil。(长期截止日期)阻止当前线程,直到depAdline时间点void undark(线程)在不获得对象的锁定的情况下唤醒线程公园。确定公园后的中断状态,然后进行其他处理。

  2.1.2.3不建议使用过期的悬挂和简历方法悬浮方法。不建议使用supsend()悬挂线程,因为悬挂()在悬挂线程时不会释放任何锁定资源。其他线程都不能访问锁它被占用。直到相应的线程执行简历()方法,并且线程悬挂可以继续,因此在此锁中阻止的其他线程可以继续执行。如果resume()操作出现在sissend()之前出现在被执行,线程将始终悬挂并始终占据锁,这很容易产生死锁。

  此外,对于线程悬挂,其线程状态实际上是可以运行的

  收益方法也称为“线程仪式”,因此派生的线程释放了CPU的执行,因此您和其他线程重新计算以执行CPU。

  该线程直接返回可运行的状态,而不是将线程放在阻塞状态下,因此也可能是当前的线程当前的螺纹目前正在输入“运行状态”以继续运行。

  收益率将尝试使相同的级别和高级别的线程具有更大的功率,并且睡眠将使所有线程具有相同的功率,但不是绝对的。,充满不确定性。

  收益方法未释放已获得的锁定,但仅仅是为了释放CPU的执行。

  如果您不理解或不需要交流,可以留言。此外,我希望收集和注意,我将继续更新Java的各种教程!