这是个linkedlist作为共享区,多线程访问的代码,已经使用了Collections.synchronizedList方法防止多线程的问题,执行后遍历输出没有问题,但是使用删除指定对象,却一直删除不干净,不知道为什么??如下所示: import java.util.*; import linkedList.linkedList.PhoneList; System.out.println(“………………………..”); for (int i = 0; i < linkedList.list.size(); i++) { public static class PhoneList public PhoneList(String phoneNumList,int num) { } class thread extends Thread{ } |
|
5分 |
好长的一段代码啊,我感觉好像是主线程的删除操作都完成了,添加的线程还在跑
|
应该不会啊,我在遍历前通过System.out.println(linkedList.list.size());已经能够显示正常数据了的,而且又使用 try {
Thread.sleep(50); } catch (InterruptedException e) {}来增加主程序运行时间,不可能添加那几个数据要那么长时间吧,不知道你那里的运行结果如何呢,知道什么原因吗 |
|
我把linkedList.list.remove(i);删除指定节点的语句注释掉以后,程序遍历正常显示了所有满足要求的节点,我怀疑可能是linkedlist的遍历问题,当我只要删除其中的某个节点之后,可能遍历的顺序就出现了变化了
|
|
10分 |
我只知道你的thred类木有写run方法。。。
|
对,那里是有错误,是应该用run,但那不是主要问题,现在找到问题了,就是我上面说的遍历删除的原因,对linkedlist的遍历的过程中是不能够进行删除的,有删除操作就会出现错误,可以参考博文:http://www.cnblogs.com/frankliiu-java/articles/1759460.html
|
|
20分 |
如果一定要在遍历过程中删除,可以将for (int i = 0; i < linkedList.list.size(); i++) 改为for (int i = linkedList.list.size()-1; i >=0 ; i–) |
5分 |
没有。。自己搜搜看吧。。 |