Multithreading 16个线程等待相同的锁

Multithreading 16个线程等待相同的锁,multithreading,locking,glassfish-3,Multithreading,Locking,Glassfish 3,我在glassfish 3服务器中遇到问题。日志正在抛出消息 java.util.concurrent.RejectedExecutionException:线程池的任务队列已满,限制:256 我做了两次线程转储,发现有16个线程在等待同一个锁,例如: “_ejb-thread-pool1”守护进程prio=6 tid=0x39657c00 nid=0x1c08等待条件[0x3297f000] java.lang.Thread.State:等待(停车) 在sun.misc.Unsafe.park

我在glassfish 3服务器中遇到问题。日志正在抛出消息

java.util.concurrent.RejectedExecutionException:线程池的任务队列已满,限制:256

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

“_ejb-thread-pool1”守护进程prio=6 tid=0x39657c00 nid=0x1c08等待条件[0x3297f000] java.lang.Thread.State:等待(停车) 在sun.misc.Unsafe.park(本机方法) -停车等待(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) 位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) 位于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) 运行(Thread.java:724)

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

“_ejb-thread-pool2”守护进程prio=6 tid=0x38408c00 nid=0x1a3c等待条件[0x3ad3f000] java.lang.Thread.State:等待(停车) 在sun.misc.Unsafe.park(本机方法) -停车等待(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) 位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) 位于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) 运行(Thread.java:724)

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


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

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

被拒绝的执行可能发生在快照线程以外的其他时间。这只意味着提交量激增,而且队列早些时候已经溢出


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

为什么所有池的条件引用都相同?它是静态的吗?http-thread-pool-80有5个线程也在等待另一个相同的监视器。。admin-thread-pool-4848的线程正在锁定同一个监视器。我不明白这一点:他们等待的是条件,而不是锁。16个线程都在争夺同一个互斥锁,这表明存在严重问题,但16个工作线程都在等待一个条件,因为它们没有可用的工作可以做,这可能只是照常工作。