none
Thread执行完后需要手动回收吗? RRS feed

  • 问题

  • 想知道,如果是多核电脑,每一个Thread会不会自动分配到不同的CPU上去处理?当这些线程顺利执行完后需要手动销毁吗,还是会自动销毁?如果一直不管他,而且还不停的新增加线程会怎样?



    2013年3月17日 6:13

全部回复

  • 比如我这样用 new Thread(....).start()

    小鸡快跑

    2013年3月17日 6:22
  • 建议你把线程设置为后台的,这样一旦一个线程运行完毕之后,主程序关闭会自动关闭。

    一般的,一个线程一旦执行结束,应该自动会被回收的。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月17日 8:01
    版主
  • 在CLR里,线程会被调度到不同的cpu去处理。

    执行结束后,对于非托管资源,需要程序执行Dispose()来释放资源,然后销毁线程。

    你最好设置线程为后台线程。

    如: 

    Thread t = new Thread();
     t.IsBackground = true;
     t.Start(); 

    这样你主程序结束后,次线程会被自动销毁,如果是foreground thread 则会等到这个线程一直执行完毕。

    最好使用线程池来管理线程,或者使用更好的TPL(Task parallel library)


    2013年3月18日 10:44
  • hello

    若线程内的工作顺利完成,就会自动回收

    你需要注意的是执行过程中的例外,资源共用,线程停止

    还有,使用线程不见得会得到更好的效率。

    用ThreadPool比Thread更好,Task比 ThreadPool更好


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/


    2013年3月18日 16:43