Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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,在java中,驻留线程和等待线程之间有什么区别?我有一个jboss内核转储,分析它时会显示许多已停止的线程。查看park()方法: 出于线程调度目的禁用当前线程,除非 有许可证。如果许可证可用,则它将被消耗 并且呼叫立即返回;否则,当前线程将变为 出于线程调度目的而禁用,并处于休眠状态,直到 发生了三件事: 其他一些线程以当前线程作为 目标;或者其他线程中断当前线程;或者 虚假地(即,没有理由地)呼叫返回。这种方法不适用 报告导致方法返回的原因。来电者应 重新检查导致螺纹停在第一个位置的情况 地

在java中,驻留线程和等待线程之间有什么区别?我有一个jboss内核转储,分析它时会显示许多已停止的线程。

查看
park()
方法:

出于线程调度目的禁用当前线程,除非 有许可证。如果许可证可用,则它将被消耗 并且呼叫立即返回;否则,当前线程将变为 出于线程调度目的而禁用,并处于休眠状态,直到 发生了三件事:

其他一些线程以当前线程作为 目标;或者其他线程中断当前线程;或者 虚假地(即,没有理由地)呼叫返回。这种方法不适用 报告导致方法返回的原因。来电者应 重新检查导致螺纹停在第一个位置的情况 地点。呼叫者还可以例如确定中断状态 返回时的线程


因此,一个停驻的线程是使用
LockSupport.park()

LockSupport阻塞的线程-类使用基本线程阻塞原语创建锁和其他同步类

方法park()出于线程调度目的禁用当前线程,除非许可证可用

unpark(线程线程)使给定线程的许可证可用(如果该许可证不可用)

像这样使用它:
最后{ 锁支持。未解析(线程);
}

在Java中,通过调用
LockSupport.park()
方法而停放的线程是一个等待线程(在
thread.state.waiting
中)

有关详细信息,请参阅Java文档

有3种方法可以使线程处于等待状态:

  • 对象。无超时等待
  • Thread.join没有超时
  • 洛克公园酒店
  • 处于等待状态的线程正在等待另一个线程执行特定操作


    例如,在对象上调用Object.wait()的线程正在等待另一个线程调用该对象上的Object.notify()或Object.notifyAll()。调用thread.join()的线程正在等待指定的线程终止。

    停止意味着在许可证可用之前暂停执行许可表示继续执行的许可。 线程可以暂停其执行,直到许可证可用。当许可证可用时,停止的线程将使用它并退出一个park()方法

    停止()和等待()都将导致线程被禁用。使禁用的线程再次处于活动状态取决于其禁用方式

    通过调用禁用的线程将保持禁用状态,直到:

    • 其他一些线程调用,或者
    • 其他一些线程调用,或者
    • 呼叫错误地(即无原因地)返回
    通过调用对象禁用的线程(相当于调用)将保持禁用状态,直到:

    • 其他线程调用或,或
    • 禁用线程上的其他一些线程调用

    虽然这是一个公认的答案,但与其他选项相比,这个答案对停车的有用性几乎没有直觉。这可能会有所帮助: