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) {}
}
}
}
} 展开
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) {}
}
}
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询