日期:2014-05-17  浏览次数:20754 次

请教:封装了thread的类,其生存周期怎么算?
假定有如下的代码,我在Class1中封装thread,并在Main中循环调用new Class1。
我的问题是:
1、Main中for循环结束,打印出"end of for loop"的时候,100个new出来的Class1实例线程还未结束,此时Class1中的age申请的内存应该未释放?
2、Main中for循环结束,且100个new出来的Class1实例线程也结束掉之后,此时这100个实例对象是否结束?其申请的内存被回收?

C# code

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 100;i++ )
            {
                Class1 classtest = new Class1();
                classtest.startdownthread();
            }
            Console.WriteLine("end of for loop");
            Thread.Sleep(1000);
            Console.ReadKey();
        }
    }
    class Class1
    {
        private int[] age;
        private Thread CalulateThread;


        public Class1()
        {
            CalulateThread = null;
            age = new int[1024];
        }
        public void startdownthread()
        {
            CalulateThread = new Thread(Caculate);
            CalulateThread.IsBackground = true;
            CalulateThread.Start();
        }

        private void Caculate()
        {
            //做一些很费时的工作如数值计算等
            Thread.Sleep(1000);
            Console.WriteLine(GetHashCode());
            return;
        }
    }
}



------解决方案--------------------
1.未释放,由正在运行中的线程保存。注意通过构造函数创建一个线程的实例时,传递了一个委托,而对于实例方法的委托会保持对该实例的引用。
2.对象变为可回收,具体何时回收由GC决定。