У меня следующая ситуация: я отправляю n потоков в NotifyingBlockingThreadPoolExecutor следующим образом:
while ( index < customers.length ) {
threadPoolExecutor.submit( new Runnable() {
@Override
public void run() {
//callToExternalServiceHere;
response = mockWebService();
}
});
index++;
}
Каждый поток вызывает внешний веб-сервис, который нам пока недоступен.В итоге я создал фиктивный класс, который возвращает ответ с некоторыми данными в нем.Теперь я хотел бы иметь возможность смоделировать задержку в ответе, как я могу достичь этой цели?
Заранее спасибо
Обновление:
Это кодя использую для создания экземпляра NotifyingBlockingThreadPoolExecutor
public static NotifyingBlockingThreadPoolExecutor getThreadPoolExecutor() {
if ( instance.threadPoolExecutor == null ) {
int numThread = 0;
int availableProcessors = Runtime.getRuntime().availableProcessors();
System.out.println( "CheckMultiTransaction - getThreadPoolExecutor - availableProcessors: " + availableProcessors );
if ( WSConfiguration.getProperty( WSConstants.THREAD_MULTITRN_NUMTHREAD ) != null ) {
numThread = Integer.parseInt( WSConfiguration.getProperty( WSConstants.THREAD_MULTITRN_NUMTHREAD ) );
System.out.println( "CheckMultiTransaction - getThreadPoolExecutor - numThread indicati nella S_SYSTEM: " + numThread );
numThread = numThread > availableProcessors ? availableProcessors : numThread;
}
else {
numThread = availableProcessors;
}
System.out.println( "CheckMultiTransaction - getThreadPoolExecutor - numThread : " + numThread );
int queueSize = numThread * 2; // recommended - twice the size of the poolSize
int threadKeepAliveTime = 15;
TimeUnit threadKeepAliveTimeUnit = TimeUnit.SECONDS;
long maxBlockingTime = 10;
TimeUnit maxBlockingTimeUnit = TimeUnit.MILLISECONDS;
boolean useTimeoutQueue = false;
if ( WSConfiguration.getProperty( WSConstants.THREAD_MULTITRN_MAXBLOCKINGTIME ) != null ) {
maxBlockingTime = Long.parseLong( WSConfiguration.getProperty( WSConstants.THREAD_MULTITRN_MAXBLOCKINGTIME ) );
useTimeoutQueue = true;
}
final boolean useTimeoutQueueThread = useTimeoutQueue;
System.out.println( "THREAD_MULTITRN_MAXBLOCKINGTIME:" + WSConfiguration.getProperty( WSConstants.THREAD_MULTITRN_MAXBLOCKINGTIME ) );
Callable<Boolean> blockingTimeoutCallback = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
System.out.println( "blockingTimeoutCallback - useTimeoutQueue:" + useTimeoutQueueThread + " - Thread.currentThread().isInterrupted():" + Thread.currentThread().isInterrupted() );
if ( useTimeoutQueueThread )
return false;
else
return !Thread.currentThread().isInterrupted(); // keep waiting
}
};
instance.threadPoolExecutor = new NotifyingBlockingThreadPoolExecutor( numThread, queueSize, threadKeepAliveTime, threadKeepAliveTimeUnit, maxBlockingTime, maxBlockingTimeUnit, blockingTimeoutCallback );
}
return instance.threadPoolExecutor;
}