Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程状态java_Java_Multithreading - Fatal编程技术网

线程状态java

线程状态java,java,multithreading,Java,Multithreading,我想检查一下我的推理是否正确 首先,我应该提供一些关于我试图解决的问题的细节。线程(程序的一部分)执行以下操作: 开始了 它调用Thread.sleep(20ms) 它调用getIn()方法 它尝试获取锁(lock.lock()) 如果成功获得锁,它将调用Thread.sleep(100ms) 如果锁不可用,则调用waitingCond.await() 调用Thread.sleep(100ms)后,它调用lock.unlock() 它调用另一个方法getOut() 它终止(thread.join

我想检查一下我的推理是否正确

首先,我应该提供一些关于我试图解决的问题的细节。线程(程序的一部分)执行以下操作:

  • 开始了
  • 它调用Thread.sleep(20ms)
  • 它调用getIn()方法
  • 它尝试获取锁(lock.lock())
  • 如果成功获得锁,它将调用Thread.sleep(100ms)
  • 如果锁不可用,则调用waitingCond.await()
  • 调用Thread.sleep(100ms)后,它调用lock.unlock()
  • 它调用另一个方法getOut()
  • 它终止(thread.join())
  • 鉴于此,以下是我对线程状态的猜测:

  • 准备运行
    状态
  • 定时等待
    状态
  • 等待
    状态
  • 等待
    状态
  • 已阻止
    状态
  • 等待
    状态
  • 等待
    状态
  • 终止
    状态

  • 谢谢

    首先,您用
    READY TO RUN
    描述的状态实际上是。在我的学士学位论文中,我创建了一个转换图,显示了不同的线程状态以及它们应该改变的时间。您还没有描述
    getIn()
    的语义,所以我猜这只是一个随机方法

    如果线程正在执行代码,例如在您的方法上执行
    getIn()
    getOut()
    它是
    RUNNABLE
    而不是
    WAITING
    BLOCKED
    实际上只是一个非常短的转换状态,当线程试图声明锁时,总是会进入该状态。如果锁不可用,线程将继续被阻塞,无法执行步骤6中暗示的其他操作。此外,它在调用
    Thread.sleep()
    之后无法调用方法,它必须等待,直到时间过去

    我会按以下方式更正:

  • RUNNABLE
  • 定时等待
  • RUNNABLE
  • 被阻止
  • 定时等待
  • 被阻止
  • RUNNABLE
  • 终止
  • 免责声明:不保证过渡。甚至可能是,JVM供应商决定以另一种方式实现底层机制,例如,它可以通过旋转等待实现阻塞


    如果您想深入探讨这个主题,请使用探查器来找出线程的状态。我自己写了一篇文章来检测这些状态:,但也有其他一些状态,例如VisualVMYourKit

    是否有任何时刻它实际处于运行状态?:)@LukasKnuth您已经中断了OP的编号,其中5.1是可选的从属步骤。你觉得这样更好吗?这对线程来说很无聊。。。还有:你没有给我们一个问题。你这是什么意思?我写下的是操作的顺序。我能给你更多的细节吗?@qxc没有,但这是StackOverflow。规则是:你问问题,我们试着回答。你没有问任何问题,只是给了我们一些信息,并告诉我们如果我们认为你的推理不正确,就进行干预。你试过这个例子吗?如果是这样的话,你的期望与你的推理不一致吗?