一个线程用于文本编写。
一个线程监视某些统计信息。
多个线程执行大量的计算序列(每个核心最多4个线程,我在2x四核服务器上运行我的应用程序)。 我的应用程序通常运行时间长达24小时,因此所有线程都在开始时创建,并且在整个应用程序运行期间保持不变。 我想要一个单一的地方来“注册”所有我的线程,当应用程序关闭时,我只需调用一个方法,它会遍历所有已注册的线程并将它们关闭。 为此,我设计了以下类:
public class ThreadManager
{
private static Object _sync = new Object();
private static ThreadManager _instance = null;
private static List<Thread> _threads;
private ThreadManager()
{
_threads = new List<Thread>();
}
public static ThreadManager Instance
{
get
{
lock (_sync)
{
if (_instance == null)
{
_instance = new ThreadManager();
}
}
return _instance;
}
}
public void AddThread(Thread t)
{
lock (_sync)
{
_threads.Add(t);
}
}
public void Shutdown()
{
lock (_sync)
{
foreach (Thread t in _threads)
{
t.Abort(); // does this also abort threads that are currently blocking?
}
}
}
}
我希望确保所有的线程都被终止,这样应用程序就可以正常关闭,即使在某些计算中途关闭也是可以的。我需要注意什么吗?考虑到我的情况,这种方法可行吗?