16个线程正在等待同一个锁

时间:2018-04-26 19:40:49

标签: 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:WAITING(停车)     在sun.misc.Unsafe.park(原生方法)      - 停车等待< 0x117b2cb0> (java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject)     在java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)     at java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await(AbstractQueuedSynchronizer.java:2043)     在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)     at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:724)

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

“__ ejb-thread-pool2”守护程序prio = 6 tid = 0x38408c00 nid = 0x1a3c等待条件[0x3ad3f000]    java.lang.Thread.State:WAITING(停车)     在sun.misc.Unsafe.park(原生方法)      - 停车等待< 0x117b2cb0> (java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject)     在java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)     at java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await(AbstractQueuedSynchronizer.java:2043)     在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)     at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:724)

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

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

1 个答案:

答案 0 :(得分:0)

如果某些执行者服务中有16个无效,那么是的,他们都在等待在任务队列中显示的内容,这是完全正常的。

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

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