/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.backend.java.lib.runtime;
import java.util.logging.Logger;
public class ABSThread extends Thread {
private static Logger logger = Logging.getLogger(ABSThread.class.getName());
private COG cog;
private ABSThreadManager manager;
protected boolean shutdown;
public ABSThread(Runnable r, ABSThreadManager m) {
super(r);
init(m);
}
private void init(ABSThreadManager m) {
this.manager = m;
manager.addThread(this);
setName("ABS Main Thread");
}
public ABSThread(ABSThreadManager m) {
super();
init(m);
}
public COG getCOG() {
return cog;
}
public void setCOG(COG c) {
cog = c;
}
@Override
public void run() {
super.run();
finished();
}
/**
* Must be called by subclasses that override run,
* when the run method has finished
*/
protected void finished() {
manager.removeThread(this);
}
public void checkGuard() {
}
public synchronized boolean isShutdown() {
return shutdown;
}
public synchronized void shutdown() {
logger.fine("Thread "+this.getId()+" received shutdown signal");
shutdown = true;
this.interrupt();
}
public synchronized void wasInterrupted(InterruptedException e) {
if (!shutdown) {
e.printStackTrace();
}
}
}