java - Interrupting a thread prior to calling Future.get() -



java - Interrupting a thread prior to calling Future.get() -

i'm trying write integration test causes interruptedexception raised production code:

@test public void test() { productionobject = new productionobject( com.google.common.util.concurrent.moreexecutors.samethreadexecutor()); thread.currentthread().interrupt(); assertthat(productionobject.execute(), equalto(defaultresponse)); }

inside productionobject's implementation:

try { (future<t> future : executorservice.invokeall(tasks))) { results.add(future.get()); } homecoming results; } grab (interruptedexception e) { thread.currentthread().interrupt(); // preserve interrupt flag homecoming defaultresponse; }

inside abstractqueuedsynchronizer.acquiresharedinterruptibly() see:

if (thread.interrupted()) throw new interruptedexception();

so expect test pass consistently.

i've seen fail in our build server (results returned rather defaultresponse). i've been unable reproduce failure locally, running test in while (true) loop, , simulating higher load running glxgears software rendering ;-) can spot mistake, give me suggestions on look, or suggest tools help me?

strange. read code same way do. see:

futuretask.get() calls sync.get(). assume dealing futuretask here. sync.get() calls sync.innerget() sync.innerget() calls acquiresharedinterruptibly(0);

which has code right off:

if (thread.interrupted()) throw new interruptedexception();

i think throw. maybe there sort of race status thread not yet know has been interrupted? have tried sleep 100ms after interrupt thread?

i ran next test on multi-cpu mac , never fails not race status -- @ to the lowest degree architecture , jre version 1.6.0_41.

for (long = 0; < 10000000; i++) { thread.currentthread().interrupt(); asserttrue(thread.interrupted()); }

java multithreading interrupt future

Comments

Popular posts from this blog

web services - java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer -

Accessing MATLAB's unicode strings from C -

javascript - mongodb won't find my schema method in nested container -