All pastes #961768 Raw Edit

Untitled

public java v1 · immutable
#961768 ·published 2008-03-29 04:50 UTC
rendered paste body
package Transcoder;import java.util.LinkedList;public class Worker extends Thread {	private static LinkedList<Transcode> jobs = new LinkedList<Transcode>();	private static Worker[] workers = new Worker[Runtime.getRuntime().availableProcessors()];		private Boolean finished = false;	int identifier;		static {		for(int i = 0; i < workers.length; i++) {			workers[i] = new Worker(i);		}	}		/**	 * NOT designed to have jobs added once the workers are running	 * Add all jobs to be performed, then set the workers going	 * @param job	 */	public static void addJob(Transcode job) {		jobs.add(job);	}		/**	 * Starts every worker	 */	public static void goToWork() {		for(Worker worker : workers) {			worker.start();		}	}		/**	 * Waits for every worker to complete	 */		public static void waitForAll() {		for(Worker worker: workers) {			worker.waitFor();		}	}		public Worker(int identifier) {		this.identifier = identifier;	}		public void run() {		Transcode currentJob;		while((currentJob = getJob()) != null) {			System.out.println("Worker #" + identifier + " Starting " + currentJob);			currentJob.transcode();			System.out.println("Worker #" + identifier + " Finished " + currentJob + "!");		}		finished();	}		private Transcode getJob() {		Transcode retval = null;		synchronized(jobs) {			if(jobs.size() > 0) {				retval = jobs.removeFirst();			}		}		return(retval);	}		private void finished() {		synchronized(finished) {			finished.notify();			finished = true;		}	}		public void waitFor() {		System.out.println("Worker #" + identifier + " waitFor: entering waitFor()");		if(finished) {			System.out.println("Worker #" + identifier + " waitFor: already finished, leaving");			return;		}		System.out.println("Worker #" + identifier + " waitFor: Attempting to grab");		synchronized(finished) {			System.out.println("Worker #" + identifier + " waitFor: grabbed! waiting...");			try {				finished.wait();				System.out.println("Worker #" + identifier + " waitFor: notified! returning.");			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}}