当前位置: 首页 > 知识库问答 >
问题:

16个线程等待同一个锁

益炜
2023-03-14

我做了几个线程转储,发现有16个线程在等待同一个锁,例如:

“__ejb-thread-pool1”守护进程prio=6 tid=0x39657c00 nid=0x1c08在条件[0x3297f000]java.lang.thread.state:waiting(parking)在sun.misc.unsafe.park(本机方法)-在java.util.concurrent.locks.locks.locks.park(locksupport.park(locksupport.java.util.concurrent.locks.abstractQueuedSynchronizer$conditionobject)在在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)在java.util.concurrent.ThreadPoolExecutor.runworker(ThreadPoolExecutor.java:1130)在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:615)在java.lang.Thread.run(ThreadPoolExecutor.java:724)

锁定的可拥有的同步器:-无

“__ejb-thread-pool2”守护进程prio=6 tid=0x38408c00 nid=0x1a3c在条件[0x3ad3f000]java.lang.thread.state:waiting(parking)在sun.misc.unsafe.park(本机方法)-在java.util.concurrent.locks.locks.locks.park(locksupport.park(locksupport.java.util.concurrent.locks.abstrict queuedsynchronizer$conditionobject)在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)在java.util.concurrent.ThreadPoolExecutor.runworker(ThreadPoolExecutor.java:1130)在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:615)在java.lang.Thread.run(ThreadPoolExecutor.java:724)

锁定的可拥有的同步器:-无...

这正常吗?我以为我会在线程转储中找到一个拥有锁的线程,但没有。请帮忙。我是线程分析的新手。

共有1个答案

宣冥夜
2023-03-14

如果某个executor服务有16个heads什么都不做,那么是的,它们都在等待任务队列中显示的内容是完全正常的。

被拒绝的执行可能发生在另一个时刻,而不是快照线程时。这只意味着提交量激增,队列提前溢出。

但要小心,这些被拒绝的执行可能甚至不在您正在查看的executor服务上。这取决于其他地方有多少其他执行器服务。

 类似资料:
  • 我如何启动两个线程,其中thread1首先执行,thread2在thread1结束时启动,而主方法线程可以在不锁定其他两个线程的情况下继续工作? 我尝试了join(),但是它需要从线程调用,线程必须等待另一个线程,没有办法执行类似thread2.join(thread1)的操作;因此,如果我在main()中调用join,我将有效地停止主线程的执行,而不仅仅是Thread2的执行。 #编辑:为什么我

  • 问题内容: 我正在用一个应用程序逻辑线程和一个数据库访问线程来制作Java应用程序。他们都坚持为应用程序和都需要的整个生命周期,以在同一时间运行(一个会谈到服务器,一个谈判给用户;当应用程序完全启动,我需要两个人工作)。 但是,在启动时,我需要确保最初应用线程等待直到数据库线程准备就绪(当前是通过轮询自定义方法确定的)。我不介意应用线程在数据库线程准备就绪之前是否阻塞。 看起来不是解决方案-db线

  • 我正在我的UI线程中调用一个方法。在这个方法中创建了一个新线程。我需要UI线程等待这个新线程完成,因为我需要这个线程的结果来继续UI线程中的方法。但我不想让UI在等待时冻结。有没有办法让UI线程在不忙的情况下等待?。

  • 线程可以等待,直到其他线程释放访问同步块的锁。我想知道当其他线程访问同步块时,一个线程可以等待多长时间?什么时候它会知道另一个线程释放了锁?

  • 两个线程在同一个监视器上等待,例如,如果一个线程调用等待锁,而另一个获取监视器的线程在通知第一个线程之前也调用等待。现在两个线程都在等待,但是没有人得到通知。我该怎么称呼这种情况?这能叫僵局吗? 编辑:假设只有这两个线程,并且无法从其他地方通知它们 更新:我刚刚创建了我在问题中描述的情况。当转换器线程在侦听器线程之前启动时,以下代码大部分时间都正常工作。然而,当我在changer之前启动liste

  • 问题内容: 我正在为我的ubuntu服务器(针对我的多客户端匿名聊天程序)实现一种简单的线程池机制,并且需要使我的工作线程进入睡眠状态,直到需要执行一项工作(以函数指针和参数的形式) 。 我当前的系统即将关闭。我(工人线程正在)问经理是否有工作可用,以及是否有5毫秒没有睡眠。如果存在,请将作业添加到工作队列中并运行该函数。糟糕的循环浪费。 什么我 喜欢 做的是做一个简单的事件性的系统。我正在考虑有