java的LinkedList多线程运行,数据存储问题,得不到正确结果

java通过多线程访问公共集合LinkedList,往里面存储数据对象以后,使用for循环输出,为什么有时候每次输出结果都不一样,有时候直接没有结果输出。不知道是程序本身... java通过多线程访问公共集合LinkedList,往里面存储数据对象以后,使用for循环输出,为什么有时候每次输出结果都不一样,有时候直接没有结果输出。不知道是程序本身的问题,还是LinkedList的使用问题,望有高手能来解答下,谢谢啦。
package linkedList;

import java.util.LinkedList;

import linkedList.linkedList.PhoneList;
public class linkedList {
public static LinkedList<PhoneList> list ;
public static void main(String [] agrs){
list = new LinkedList<PhoneList>();
new thread("1317");
new thread("1316");
new thread("1512");
System.out.println(linkedList.list.size());
for (int i = 0; i < linkedList.list.size(); i++) {
if(((linkedList.list.get(i)).phoneNumList).equals("1316")){
System.out.println((linkedList.list.get(i)).phoneNumList);
linkedList.list.remove(i); //这里删除所有"1316"的节点,但是用下面用run();的话只删除一部分,还有部分不删除,不知道为什么
}
}
System.out.println(".............................");

for (int i = 0; i < linkedList.list.size(); i++) {
System.out.println((linkedList.list.get(i)).phoneNumList);
}
}

public static class PhoneList
{
public String phoneNumList;
public int num;

public PhoneList(String phoneNumList,int num) {
this.phoneNumList = phoneNumList;
this.num = num;
}

}
}

class thread extends Thread{
String a;
PhoneList element;
thread(String a){
this.a = a;
start(); //这地方应该用start()还是run(),用start()没什么结果输出,用run有结果,但是删除不干净,如上面所述
}
public void run()
{
for(int i = 0;i<6;i++){

synchronized(this){
element = new PhoneList(a,i);
linkedList.list.add(element);
try {
Thread.sleep(500);
}
catch (InterruptedException e) {}
}

}
}
}
展开
 我来答
百度网友946507c
2014-08-04 · TA获得超过195个赞
知道答主
回答量:77
采纳率:0%
帮助的人:47万
展开全部

LInkedList不是线程安全的,

追问
这其实是多线程访问linkedlist,在遍历过程中对其链表结构进行修改就会出问题,解决办法可以使用另外一个链表来存储满足条件的节点,遍历完成后再统一删除,就可以解决啦。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式