
public class IteratorHelper<T> {
	
	private Thread itr;
	T passBetweenThreads;
	Thread pausedThread;
	
	public IteratorHelper(Runnable r){
		itr = new Thread(r);
	}
	
	public boolean hasNext(){
		return ( ! ( itr.getState() == Thread.State.TERMINATED) );
	}
	
	
	public T get(){
		pausedThread = Thread.currentThread();
		if ( itr.getState() == Thread.State.NEW ){
			synchronized (itr) { itr.start(); }
		} else {
			synchronized (itr) { itr.notify(); }
		}
			
		synchronized (pausedThread) {
			try { pausedThread.wait(); } catch (Exception e) { System.out.println("BADNESS!!" + e); }
		}
		return passBetweenThreads;
	}


	public void yield(T v){
		passBetweenThreads = v;
		synchronized (pausedThread) { pausedThread.notify(); }
		synchronized (itr) {
			try { itr.wait(); } catch (Exception e) { System.out.println("BADNESS!" + e); }
		}
	}
	
	
	
}