读书人

请问:封装了thread的类其生存周期如

发布时间: 2012-10-16 09:57:37 作者: rapoo

请教:封装了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决定。

读书人网 >C#

热点推荐