日期:2014-05-20  浏览次数:20647 次

在问一个多线程的问题,如何管理线程
假如线程数可以由用户动态的增加或者减少,如果管理这些线程,用线程数组吗还是Hash表?

for   (   int   i   =   0;   i   <   8;   i   ++   )
{
Thread   t   =   new   Thread(   new   ThreadStart(PrintUserId)   );
t.Start();
}
如果我的线程通过上述方式创建,同时PrintUserId是一个非常耗时的过程,那么
1)   如何枚举当前进程中的这些线程?
2)   如果PrintUserId执行到一半我就像结束进程,应该怎么操作?

谢谢

------解决方案--------------------
用数组,Hash,ArrayList等都可以,把它做成全局的。
可以在PrintUserId中添加方法在其结束前从上面的全局列表中移除自己的线程。
如果PrintUserId不方便改,就再做个方法把PrintUserId放到其中,结束时移除自己。
当然也可以单独为用户做一个方法来遍历全局列表,如果线程结束就移除。
------解决方案--------------------
to 1) 如何枚举当前进程中的这些线程?
2) 如果PrintUserId执行到一半我就像结束进程,应该怎么操作?

如果是自己在创建线程的时候,把它保存到集合容器中,那么实现这两点是很容易的。

如果创建的时候没有保存,你可以通过process.Threads来实现,不过相应的就不直观了。
------解决方案--------------------
线程池
------解决方案--------------------
创建的时候保存到一个集合中去,然后进行操作就是了。
------解决方案--------------------
结束进程最好用通知它自己结束,最好不要暴力结束