/**
* 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.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ABSThreadManager {
private static Logger logger = Logging.getLogger(ABSThread.class.getName());
private final List<ABSThread> threads = new ArrayList<ABSThread>();
private final ABSRuntime runtime;
ABSThreadManager(ABSRuntime r) {
runtime = r;
}
public synchronized void addThread(ABSThread t) {
threads.add(t);
if (logger.isLoggable(Level.FINEST)) logger.finest("Added thread "+t);
}
public synchronized void removeThread(ABSThread t) {
threads.remove(t);
if (logger.isLoggable(Level.FINEST)) logger.finest("Removed thread "+t);
if (threads.isEmpty()) {
runtime.systemFinished();
}
}
public synchronized void shutdownAllThreads() {
for (ABSThread t : threads) {
t.shutdown();
}
}
public synchronized <T> List<T> getAllCopyOf(Class<T> clazz) {
List<T> result = new ArrayList<T>();
for (ABSThread t : threads) {
if (t.getClass().equals(clazz)) {
result.add((T)t);
}
}
return result;
}
}