这是循环僵局还是循环等待?

时间:2018-03-02 10:14:32

标签: java multithreading deadlock blocked-threads

当我使用JMeter发送多个请求时,我正在使用JProfiler检测Restful Java微服务。我看到有很多被阻止的线程。微服务使用Spring,SpringBoot。 当发送多个请求时,会出现问题。

在JProfiler工具中,我可以看到: Overview Thread History Monitor Usage Monitor History Thread Dump

  • 读完后:Circular DeadlockDining philosophers,我 认为存在循环死锁。这是对的吗?
  • 死锁和循环死锁有什么区别?后 我在互联网上浏览了一下,我看到了另一个概念,循环等待。那么圆形等待呢?
  • 如果您查看“监视历史记录”和“概述”部分,您会看到许多被阻止的线程,同时线程也会等待其他线程完成。问题出在ReentrantLock.NonfairSync类。但是如果您查看线程转储,您会看到线程处于等待状态,并且在堆栈跟踪的顶部,您会看到 sun.misc.Unsafe.park 。使用方法park和unpark,它实现了Thread Locks。你知道它会是什么吗?
  • 可能再次出现com.fasterxml库的问题? jackson project

谢谢

1 个答案:

答案 0 :(得分:0)

  

在我读到:循环僵局,餐饮哲学家之后,我认为存在循环僵局。这是对的吗?

根据证据无法说出来。

  

死锁和循环死锁有什么区别?

我以前从未见过循环僵局这个词,但在那篇文章的背景下,"循环"似乎意味着有两个以上的线程死锁。在我看来,这并不是一个特别有用的区别。

  

在互联网上浏览了一下后,我看到了另一个概念,即循环等待。循环等待怎么样?

我在维基百科Deadlock页面中找到了这个词。在这种情况下,它指的是你有N个代理人(例如线程)A 1 到A N 并且:

的任何情况
  • 1 等待A 2
  • 2 等待A 3
  • ...
  • N 等待A 1

制作"圈"或者在依赖项中循环。请注意,N可以小到2.(维基百科页面中对此进行了清楚解释。)

  

使用park和unpark方法实现了Thread Locks。你知道它会是什么吗?

这就是在JVM中实现锁和等待的方式。

  

可能是com.fasterxml.jackson库的问题吗?

这是可能的。您使用库的方式也可能存在问题。然而这是猜测。没有足够的证据表明您提供的信息存在什么问题。

我建议你停止寻找答案。相反,戴上你的思维帽,开始阅读代码和javadocs。

如果我猜测,那就是你有多个线程试图共享某种XML解析器对象,其中对象不是为了共享