net.spy.memcached.compat
Class SyncThread<T>

java.lang.Object
  extended by java.lang.Thread
      extended by net.spy.memcached.compat.SpyThread
          extended by net.spy.memcached.compat.SyncThread<T>
All Implemented Interfaces:
Runnable

public class SyncThread<T>
extends SpyThread

Thread that invokes a callable multiple times concurrently.


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
SyncThread(CyclicBarrier b, Callable<T> c)
          Get a SyncThread that will call the given callable when the given barrier allows it past.
 
Method Summary
static
<T> Collection<SyncThread<T>>
getCompletedThreads(int num, Callable<T> callable)
          Get a collection of SyncThreads that all began as close to the same time as possible and have all completed.
static
<T> int
getDistinctResultCount(int num, Callable<T> callable)
          Get the distinct result count for the given callable at the given concurrency.
 T getResult()
          Get the result from the invocation.
 void run()
          Wait for the barrier, invoke the callable and capture the result or an exception.
 
Methods inherited from class net.spy.memcached.compat.SpyThread
getLogger
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SyncThread

public SyncThread(CyclicBarrier b,
                  Callable<T> c)
Get a SyncThread that will call the given callable when the given barrier allows it past.

Parameters:
b - the barrier
c - the callable
Method Detail

run

public void run()
Wait for the barrier, invoke the callable and capture the result or an exception.

Specified by:
run in interface Runnable
Overrides:
run in class Thread

getResult

public T getResult()
            throws Throwable
Get the result from the invocation.

Returns:
the result
Throws:
Throwable - if an error occurred when evaluating the callable

getCompletedThreads

public static <T> Collection<SyncThread<T>> getCompletedThreads(int num,
                                                                Callable<T> callable)
                                                     throws InterruptedException
Get a collection of SyncThreads that all began as close to the same time as possible and have all completed.

Type Parameters:
T - the result type of the SyncThread
Parameters:
num - the number of concurrent threads to execute
callable - the thing to call
Returns:
the completed SyncThreads
Throws:
InterruptedException - if we're interrupted during join

getDistinctResultCount

public static <T> int getDistinctResultCount(int num,
                                             Callable<T> callable)
                                  throws Throwable
Get the distinct result count for the given callable at the given concurrency.

Type Parameters:
T - the type of the callable
Parameters:
num - the concurrency
callable - the callable to invoke
Returns:
the number of distinct (by identity) results found
Throws:
Throwable - if an exception occurred in one of the invocations