package com.wyp.materialqqlite.qqclient.task;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.HashMap;
public class TaskManager {
private ExecutorService m_ThreadPool = null;
private HashMap<String, Task> m_mapTask = null;
private static final int THREAD_COUNT = 10;
synchronized public void init(int nThreadNums) {
if (1 == nThreadNums)
m_ThreadPool = Executors.newSingleThreadExecutor();
else if (-1 == nThreadNums)
m_ThreadPool = Executors.newCachedThreadPool();
else if (0 == nThreadNums)
m_ThreadPool = Executors.newFixedThreadPool(THREAD_COUNT);
else
m_ThreadPool = Executors.newFixedThreadPool(nThreadNums);
m_mapTask = new HashMap<String, Task>();
}
synchronized public void shutdown() {
m_ThreadPool.shutdown();
for (Task task : m_mapTask.values())
{
if (task != null)
task.cancelTask();
}
m_mapTask.clear();
}
synchronized public boolean addTask(Task task) {
if (m_ThreadPool.isShutdown())
return false;
if (m_mapTask.get(task.getTaskName()) != null)
return false;
task.setTaskManager(this);
m_mapTask.put(task.getTaskName(), task);
m_ThreadPool.execute(task);
return true;
}
synchronized public Task findTask(String strTaskName) {
return m_mapTask.get(strTaskName);
}
synchronized public void delTask(String strTaskName) {
Task task = m_mapTask.get(strTaskName);
if (task != null) {
task.cancelTask();
m_mapTask.remove(strTaskName);
}
}
synchronized public void delAllTask() {
for (Task task : m_mapTask.values())
{
if (task != null)
task.cancelTask();
}
m_mapTask.clear();
}
}