Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2008 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: IBM Corporation - initial API and implementation /
 
 
 package org.eclipse.jdt.internal.compiler;
 
 
 public class ProcessTaskManager implements Runnable {
 
 	private int unitIndex;
 
 	// queue
 	volatile int currentIndexavailableIndexsizesleepCount;
 
 	public static final int PROCESSED_QUEUE_SIZE = 12;
 
 public ProcessTaskManager(Compiler compiler) {
 	this. = compiler;
 	this. = 0;
 
 	this. = 0;
 	this. = 0;
 	this. = 0; // 0 is no one, +1 is the processing thread & -1 is the writing/main thread
 	this. = new CompilationUnitDeclaration[this.];
 
 	synchronized (this) {
 		this. = new Thread(this"Compiler Processing Task"); //$NON-NLS-1$
 	}
 }
 
 // add unit to the queue - wait if no space is available
 private synchronized void addNextUnit(CompilationUnitDeclaration newElement) {
 	while (this.[this.] != null) {
 		//System.out.print('a');
 		//if (this.sleepCount < 0) throw new IllegalStateException(new Integer(this.sleepCount).toString());
 		this. = 1;
 		try {
 			wait(250);
 		} catch (InterruptedException ignore) {
 			// ignore
 		}
 		this. = 0;
 	}
 
 	this.[this.++] = newElement;
 	if (this. >= this.)
 		this. = 0;
 	if (this. <= -1)
 		notify(); // wake up writing thread to accept next unit - could be the last one - must avoid deadlock
 }
 
 	CompilationUnitDeclaration next = null;
 	boolean yield = false;
 	synchronized (this) {
 		next = this.[this.];
 		if (next == null || this. != null) {
 			do {
 				if (this. == null) {
 					if (this. != null) {
 						// rethrow the caught exception from the processingThread in the main compiler thread
 						if (this. instanceof Error)
 							throw (Errorthis.;
 					}
 					return null;
 				}
 				//System.out.print('r');
 				//if (this.sleepCount > 0) throw new IllegalStateException(new Integer(this.sleepCount).toString());
 				this. = -1;
 				try {
 					wait(100);
 				} catch (InterruptedException ignore) {
 					// ignore
 				}
 				this. = 0;
 				next = this.[this.];
 			} while (next == null);
 		}
 
 		this.[this.++] = null;
 		if (this. >= this.)
			this. = 0;
		if (this. >= 1 && ++this. > 4) {
			notify(); // wake up processing thread to add next unit but only after removing some elements first
			yield = this. > 8;
		}
	}
	if (yield)
		Thread.yield();
	return next;
public void run() {
	while (this. != null) {
		this. = null;
		int index = -1;
		try {
			synchronized (this) {
				if (this. == nullreturn;
				if (this. == null) {
					this. = null;
					return;
				}
				index = this.++;
			}
			try {
						new String[] {
							String.valueOf(index + 1),
						}));
				this..process(this.index);
finally {
				if (this. != null)
			}
catch (Error e) {
			synchronized (this) {
				this. = null;
				this. = e;
			}
			return;
catch (RuntimeException e) {
			synchronized (this) {
				this. = null;
				this. = e;
			}
			return;
		}
	}
public void shutdown() {
	try {
		Thread t = null;
		synchronized (this) {
			if (this. != null) {
				t = this.;
				this. = null;
			}
		}
		if (t != null)
			t.join(250); // do not wait forever
catch (InterruptedException ignored) {
		// ignore
	}
New to GrepCode? Check out our FAQ X