我先创建了一个类,在类中开了2个线程,线程中都是while(true) 死循环 。 当我把类实例化的时候,两个线程就创建并运行了, 这个时候,类被释放掉,这两个线程是继续执行还是也被释放掉?
当然继续执行了
在类中开启的线程,现在这个类完全被释放掉了,那线程怎么会还在执行呢? 是后台线程
@百鸟朝凤: 后台线程,你也没先说啊.就算是后台线程.它也和创建的类没关系.只跟主线程有关.主线程不关就继续.
@长蘑菇星人: 也就说线程在创建之后,就完全脱离类了? 但是我线程还用了类里面的变量,类被释放掉之后,那类中的变量了,如何还在线程中使用?是不是这个时候线程该抛出异常了?
@百鸟朝凤: 不会啊.如果线程中有引用.,那个类就不会被垃圾回收.这时候线程你控制不了,类也不会被回收.可以算是内存泄漏了.
@长蘑菇星人: 那我就是想在类被释放的时候关闭全部这个类中创建的东西,那我能强制回收所有资源不
@百鸟朝凤: 可以啊.释放的时候把线程停了.就都安静了..
@长蘑菇星人: 问题是死循环。。。在类释放的时候是可以触发什么事件么,在这个事件里面停止线程?
@百鸟朝凤: 难道你的释放不是调用Dispose方法么..
bool 线程已死 = false;
void loop(){
while(!线程已死){
//干活
}
}
void Dispose(){
线程已死 = true;
}
@长蘑菇星人: 我先试试。。。不懂了再问下你0.0
public class myclass { int k; public myclass(int _k) { k = _k; Thread th = new Thread(xiancheng); th.IsBackground = true; th.Start(); } private void xiancheng() { while(true) { Console.Write(k.ToString()); } } }
private void button1_Click(object sender, EventArgs e) { myclass my = new myclass(5); }
调用之后,线程果然在一直执行,现在我在哪可以释放资源啊。。。实例化的类根本没有dispose 方法
@百鸟朝凤:
public class myclass
{
int k;
bool 线程已死 = false;
public myclass(int _k)
{
k = _k;
Thread th = new Thread(xiancheng);
th.IsBackground = true;
th.Start();
}
private void xiancheng()
{
while(!线程已死)
{
Console.Write(k.ToString());
}
}
public void Dispose(){
线程已死 = true;
}
}
private void button1_Click(object sender, EventArgs e)
{
myclass my = new myclass(5);
my.Dispose();
}
@百鸟朝凤: 自己写一个dispose方法啊,释放类的时候调用一下,世界安静了。。
@长蘑菇星人: 哦哦哦,明白了。那这样的话,我在类中所有的变量就都被释放了吧。 我实际项目中的类中包括 socket对象,也会被释放掉吧
@百鸟朝凤: emmmm 不如 你先写出来
while(“是否需要运行”)这样子就可以了。释放类的时候把那个变量改成false
你都background的了,用线程池不是更好?何必给自己添加麻烦?
还有那种加个没任何防御标识标明需不需要退出的,幸好里面有个io操作,要是碰到纯cpu计算那就哭吧。
自己测试下就知道了,在线程中加一个全局变量,到时看下变量就知道线程在不在了