1. A multithreaded processor comprising: an instruction buffer for storing instructions for a plurality of threads; at least one processor core for executing instructions stored in the instruction buffer; and a scheduler for selecting which of the plurality of threads will have an instruction scheduled for execution by monitoring a current thread state for each of the plurality of threads to determine whether each thread is ready to be scheduled for execution, whether each thread is currently executing and what condition is preventing each thread from executing, where the scheduler selects a first thread having a current thread state indicating that the first thread was least recently scheduled.