package org.eclipse.debug.jdi.tests;/**********************************************************************Copyright (c) 2000, 2002 IBM Corp.  All rights reserved.This file is made available under the terms of the Common Public License v1.0which accompanies this distribution, and is available athttp://www.eclipse.org/legal/cpl-v10.html**********************************************************************//** * An abstract reader that continuously reads. */abstract public class AbstractReader {	protected String fName;	protected Thread fReaderThread;	protected boolean fIsStopping = false;	/*	 * Creates a new reader with the given name.	 */	public AbstractReader(String name) {		fName = name;	}	/**	 * Continuously reads. Note that if the read involves waiting	 * it can be interrupted and a InterruptedException will be thrown.	 */	abstract protected void readerLoop();	/**	 * Start the thread that reads events.	 * 	 */	public void start() {		fReaderThread = new Thread(new Runnable() {			public void run() {				readerLoop();			}		}, fName);		fReaderThread.setDaemon(true);		fReaderThread.start();	}	/**	 * Tells the reader loop that it should stop.	 */	public void stop() {		fIsStopping = true;		if (fReaderThread != null)			fReaderThread.interrupt();	}}