package threadpool // Callable the tasks which returns the output after exit should implement this interface type Callable interface { Call() interface{} } // Future is the handle returned after submitting a callable task to the thread threadpool type Future struct { response chan interface{} done bool } // callableTask is internally used to wrap the callable and future together // So that the worker can send the response back through channel provided in Future object type callableTask struct { Task Callable Handle *Future } // Get returns the response of the Callable task when done // Is is the blocking call it waits for the execution to complete func (f *Future) Get() interface{} { return <-f.response } // IsDone returns true if the execution is already done func (f *Future) IsDone() bool { return f.done } // Runnable is interface for the jobs that will be executed by the threadpool type Runnable interface { Run() }