一个关于实时计费的算法问题!!!!有过经验的请指点一下!!
  <换个标题我再问!!!>  
 小弟正在做一个系统,其中包含一个类如下: 
 class   学生 
 { 
                string   学号; 
                string      费用;               
                public   void   计费(学号,费用) 
                { 
                            费用减去某值; 
                            Thread.sleep(一定时间间隔);          
                } 
 }   
 程序在一定的条件下要创建一个学生的实例,传递学号和他的费用,要求按某时间间隔前去一定的费用,这个容易实现,new   Thread(new   ThreadStart(计费));就可以了吧,可是,如果我在另外一种情况下,需要再此传人这个学生的学号,根据该学号中止对这位同学的计费过程,我要如何抓到这个线程呢?   
 我是这样想的,定义包含一个静态ArrayList(或者数组)的类,每当我发生计费情况时,我先把学号加进这个列表中(Add),发生取消计费情况时,从列表中删除该学号,然后Studentx.计费()方法中,我加上一条对这个ArrayList的扫描,如果还在,那我计费继续,如果该学号被删除,就跳出while{}.     
 我自己觉得这个算法有问题,就是我有三中语句在访问这个ArrayList:Add()   remove()计费() 
 如果需要计费的学生很多,需要很多线程,同时又有很多add()和remove(),即使加了共享锁和互斥锁,我还是担心系统会有问题,同时我决定这个算法也不高效,不知道各位平时是怎么解决这种监控问题的???拜请指教!!!!!!!   
------解决方案--------------------这不是上网卡计费一样的吗? 
 这可以用事件消息吧.给每一个学生对象定义一个处理消息的事件方法,系统每隔一段时间给所有当前学生对象发送消息. 
 public void OnTime() 
 { 
   //计费(学号,费用) 
 }   
 主程序中 
 public delegate void OnTimeEvent();   
 OnTimeEvent onTimeEvent += student.OnTime();   
 当然对于事件引发的问题还的另外修改代码
------解决方案--------------------为啥非要用多线程呢?记录开始和结束的事件不就好了?需要的时候调用一个方法进行计费。效率会高一点吧。 
 另外,楼主的问题我也想问啊,就是捕捉线程的问题。
------解决方案--------------------lz设计有问题,计费应该是一个单独线程定期对列表里所有学生进行计费,而不是每个学生开一个线程。
------解决方案--------------------不是同时就不能一个线程处理了? 
 晕啊
------解决方案--------------------支持一下,肯定不需要用多线程。   
 需要监视的学生放到一个LIST里面,定时扣钱就是了。