Tim*_*imo 30 java multithreading
我注意到我的java应用程序(在tomcat6上运行)产生了许多不终止的线程.
所以我创建了一个线程转储,并注意到有大量的线程在等待,如下所示:
"pool-1-thread-22" prio=5 tid=101b4b000 nid=0x127122000 waiting on condition [127121000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <6c340cee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:680)
Locked ownable synchronizers:
- None
Run Code Online (Sandbox Code Playgroud)
现在的问题是:这些线程在等什么?我怀疑类似乎产生了这些线程,但我不知道究竟是什么让这些线程卡住了.
我有什么办法可以找到原因,除了逐行撕开类并保持监视线程行为?
pty*_*tyx 24
在tomcat上,他们通常会请求工作线程等待某人连接.没什么好担心的.他们已经准备好处理那些同时连接到您的服务器的100个用户.
这些线程是ThreadPool的一部分.更具体的java.util.concurrent.ThreadPoolExecutor.线程正在等待Runnable/Callable提交到池中.例如
ExecutorService e = Executors.newFixedThreadPool(10);
Run Code Online (Sandbox Code Playgroud)
将创建10个将等待的线程
e.submit(new Runnable(){
public void run(){ ...}
});
Run Code Online (Sandbox Code Playgroud)
然后将通知一个线程并调用该runnable.它们用于什么我无法分辨.你必须找出启动线程池的内容.也许它处理客户端请求到应用程序服务器.
| 归档时间: |
|
| 查看次数: |
42761 次 |
| 最近记录: |