黑马程序员技术交流社区
标题:
对象在线程的存储情况
[打印本页]
作者:
sd110572
时间:
2013-12-9 12:24
标题:
对象在线程的存储情况
本帖最后由 sd110572 于 2013-12-9 15:18 编辑
List<Client> clients = new ArrayList<Client>();
Client c = new Client();
clients.add(c);
new Thread(c).start();
public class Client implements Runnable{
@Override
public void run(){
while(flag1){
clients.remove(this);
flag =false;
}
}
}
复制代码
在线程中执行中,把执行线程的对象删除,为什么不影响线程的运行
还有,new Thread(c).start()是否把对象copy了一份?
作者:
hel
时间:
2013-12-9 13:13
你只是将集合中的元素从集合中移出去了,并没有删除对象,
对象是不能自己删除的,是由jvm调用的,jvm在感觉他没用的时候就会将其删除
作者:
Cheers_for_CRAZ
时间:
2013-12-9 15:03
首先你要明白,你在集合中存储的是对象的引用值,这个引用值指向了在堆中创建的对象,
你删除的是集合中的引用值,并不是堆内存中的对象。堆内存中的对象是由jvm删除的。
而你运行线程时,堆内存中的对象并没有被删除,这时候程序当然依然运行了!
作者:
Weix1992
时间:
2013-12-9 16:47
看楼主晕了,你只是启动线程调用了run方法,然后run方法里面用集合的remove方法删除了其中的一个client对象,又不是把client类给删了~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2