我已經創建了專用線程池來處理Glassfish v3中的特定HTTP請求。我想在任何給定的時間點獲得不活動線程的數量(free-not running),因爲我需要根據工作線程的可用性來限制HTTP請求。有沒有暴露的API來獲得這個?除非線程可用,否則我不想將請求提交給線程池。獲取glassfish上的HTTP線程數
0
A
回答
1
回答你的問題:根據我所知,沒有這樣的API可以給你提供你需要的方便的細節,所以我認爲你必須自己計算它。
對於解決方案部分:java.lang.management
包應該可以幫到你。
java.lang.management.ManagementFactory
的ManagementFactory類是獲得託管Bean針對Java平臺的工廠類。
您可以考慮使用ManagementFactory
,它允許您通過公開的Java託管bean從JVM獲取詳細信息。對於你的情況,你可以使用ThreadMXBean
這將讓你獲得所有的JVM線程信息。
java.lang.management.ThreadMXBean
的管理接口Java虛擬機的線程系統。
閱讀ThreadMXBean
文檔和API深入瞭解它,我認爲最終你可以使用java.lang.management.ThreadInfo
對象來獲得你需要的所有信息。
java.lang.management.ThreadInfo
java.lang.management.ThreadInfo
得到你很多的主題細節如下表所示。我不認爲其他任何Java類可以提供有關Thread的更多信息。
- 線程ID。
- 線程的名稱。
- 線程狀態。
- 在其上線程被阻塞由於該目的:
- 等待進入同步塊/方法,或
- 等待在Object.wait方法得到通知,或
- 停車因一個LockSupport.park調用。
- 擁有線程被阻塞的對象的線程的ID。
- 線程的堆棧跟蹤。
- 線程鎖定的對象監視器列表。
- 由線程鎖定的可歸屬同步器的列表。
下面是我爲您創建的一個示例,請注意,這是爲了讓您開始使用,並且無法提供完整的解決方案,因此請做更多的研究,但我認爲會有所幫助。
我正在獲取所有線程狀態並將它們打印出來,因此您可以執行IF-ELSE,然後根據狀態等準備一些內容,然後採取必要的措施。
希望這會有所幫助!
private static void getThreadInfo() {
System.out.println("Started");
ThreadMXBean managementFactory = ManagementFactory.getThreadMXBean();
long threadIds[] = managementFactory.getAllThreadIds();
for (int i = 0; i < threadIds.length; i++) {
ThreadInfo info = managementFactory.getThreadInfo(threadIds[i]);
System.out.println("Thread name = " + info.getThreadName() + " Thread id = " + info.getThreadId() + " Thread state = " + info.getThreadState());
}
System.out.println("#############");
System.out.println(Thread.currentThread().getAllStackTraces());
}
輸出:
Started
Thread name = Attach Listener Thread id = 5 Thread state = RUNNABLE
Thread name = Signal Dispatcher Thread id = 4 Thread state = RUNNABLE
Thread name = Finalizer Thread id = 3 Thread state = WAITING
Thread name = Reference Handler Thread id = 2 Thread state = WAITING
Thread name = main Thread id = 1 Thread state = RUNNABLE
#############
{Thread[Finalizer,8,system]=[Ljava.lang.StackTraceElement;@1748ba4, Thread[Attach Listener,5,system]=[Ljava.lang.StackTraceElement;@7bd86d, Thread[main,5,main]=[Ljava.lang.StackTraceElement;@bdff3b, Thread[Reference Handler,10,system]=[Ljava.lang.StackTraceElement;@1bf8a41, Thread[Signal Dispatcher,9,system]=[Ljava.lang.StackTraceElement;@dd841}
相關問題
- 1. 多線程去HTTP獲取
- 2. Glassfish上的單線程MDB
- 3. Glassfish V3線程數增加
- 4. 在部署後在glassfish上獲取HTTP狀態503
- 5. 從子線程獲取http會話?
- 6. 從線程獲取http請求信息
- 7. GlassFish服務器上的獨立線程
- 8. webservice with glassfish上的線程3.1.1
- 9. Glassfish v3 - 如何獲取/分析線程轉儲?
- 10. 如何獲取FreeBSD上當前進程的線程數?
- 11. $ http&JSESSIONID with Glassfish
- 12. Glassfish上的Spring - 獲取Hibernate參數記錄?
- 13. glassfish jax-rs多線程
- 14. Glassfish線程池問題
- 15. 獲取主線程的線程號
- 16. 線程獲取已被其他線程獲取的ReentrantLock
- 17. 獲取HTTP狀態403 - 在Glassfish 4.1.1上登錄後禁止登錄
- 18. 使用http獲取請求終止的線程終止
- 19. 獲取等待聯鎖的線程數
- 20. 獲取線程ID
- 21. Glassfish上的遠程圖像
- 22. JRuby上的Ruby :: Net :: HTTP線程安全
- 23. 的Java EE/GlassFish的 - 線程和連接
- 24. 離子2:離線HTTP獲取請求
- 25. 從JMX獲取Glassfish 4.1.1
- 26. 獲取線程的輸出
- 27. 在glassfish上運行的jsf應用程序上被阻塞的線程4.1.1
- 28. 從輔助線程獲取主線程
- 29. 從線程獲取線程ID
- 30. GlassFish中的HTTP連接池
@VishalP任何消息? – hagrawal