1
我有一個過程(procA)需要多次調用Web服務,然後返回結果集。有限的多線程操作
procA可能會同時被稱爲少數幾次。
對web服務的調用需要一段時間,但併發調用不會對性能產生很大影響。
因此,爲procA創建一個線程池來調用web服務將是有益的,這樣一次調用procA就可以調用所有對web服務的調用,然後等待它們全部完成後再繼續。
但是我不想每個procA都有一個線程池,因爲如果有多個對procA的併發調用,我想限制/限制一次訪問webservice的線程總數。
最佳解決方案是一個共享線程池,每個線程池都調用procA共享。
我需要幫助解決的唯一問題是如何告訴所有通過第一次調用procA排隊的webservice任務完成?
編輯:堆棧跟蹤
Daemon Thread [http-80-4] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park(Object) line: 158
FutureTask$Sync(AbstractQueuedSynchronizer).parkAndCheckInterrupt() line: 747
FutureTask$Sync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibly(int) line: 905
FutureTask$Sync(AbstractQueuedSynchronizer).acquireSharedInterruptibly(int) line: 1217
FutureTask$Sync.innerGet() line: 218
FutureTask<V>.get() line: 83
ThreadPoolExecutor(AbstractExecutorService).invokeAll(Collection<Callable<T>>) line: 205
...
不錯,我會試試看! – pstanton 2010-07-29 05:42:07
重新編輯,事件更好!一旦我測試過,就會給我打勾。 – pstanton 2010-07-29 05:51:36
這個工作,但它似乎卡住invokeAll偶爾,看到我的編輯線程的堆棧跟蹤.. – pstanton 2010-07-29 06:44:49