package linkedList;
import java.util.*;
import linkedList.linkedList.PhoneList;
public class linkedList {
public static List<PhoneList> list ;
public static void main(String [] agrs){
list = Collections.synchronizedList(new ArrayList<PhoneList>());
new thread("1317").start();
new thread("1316").start();
new thread("1512").start();
try {
Thread.sleep(50);
}
catch (InterruptedException e) {}
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"的节点,但是执行结果却只删除一部分,还有部分不删除,不知道为什么
}
}
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;
}
public void start()
{
for(int i = 0;i<3;i++){
element = new PhoneList(a,i);
synchronized(linkedList.list){
linkedList.list.add(element);
try {
Thread.sleep(50);
}
catch (InterruptedException e) {}
}
}
}
}
>>>>>>>>>>>>>>这是执行结果>>>>>>>>>>>>>>>>>>>>>>>>
9
1316
1316
.............................
1317
1317
1317
1316
1512
1512
1512 后面还有一个残留的1316,不知道是什么原因,我在遍历的前面已经用了Thread.sleep(50);给线程足够的执行时间了,但还是出现这样的结果。
附:再问下多线程执行过程中,创建新线程后,是在执行新线程的过程中,程序就执行后面代码了,不用等到新线程执行完吧,如果我创建的是一个方法类,使用new 类();的方式也是可以不用等该类执行完程序就会自动执行后面代码吗???
8 个解决方案
#1
好长的一段代码啊,我感觉好像是主线程的删除操作都完成了,添加的线程还在跑
#2
应该不会啊,我在遍历前通过System.out.println(linkedList.list.size());已经能够显示正常数据了的,而且又使用 try {
Thread.sleep(50);
}
catch (InterruptedException e) {}来增加主程序运行时间,不可能添加那几个数据要那么长时间吧,不知道你那里的运行结果如何呢,知道什么原因吗
Thread.sleep(50);
}
catch (InterruptedException e) {}来增加主程序运行时间,不可能添加那几个数据要那么长时间吧,不知道你那里的运行结果如何呢,知道什么原因吗
#3
我把linkedList.list.remove(i);删除指定节点的语句注释掉以后,程序遍历正常显示了所有满足要求的节点,我怀疑可能是linkedlist的遍历问题,当我只要删除其中的某个节点之后,可能遍历的顺序就出现了变化了
#4
我只知道你的thred类木有写run方法。。。
#5
对,那里是有错误,是应该用run,但那不是主要问题,现在找到问题了,就是我上面说的遍历删除的原因,对linkedlist的遍历的过程中是不能够进行删除的,有删除操作就会出现错误,可以参考博文:http://www.cnblogs.com/frankliiu-java/articles/1759460.html
#6
如果一定要在遍历过程中删除,可以将for (int i = 0; i < linkedList.list.size(); i++) 改为for (int i = linkedList.list.size()-1; i >=0 ; i--)
#7
谢谢啊,按您的代码程序运行正常了。问题处理好了,现在在弄AES加密的东西,需要用的是128位的CFB模式的AES加密方式,在网上找了下,AES加密的java代码有些,但好像没有找到CFB模式下的128位的代码,应该每个模式的代码实现都不一样,不知道你有相关代码实现的吗,初学java自己编写好像不太现实的??
#8
对,那里是有错误,是应该用run,但那不是主要问题,现在找到问题了,就是我上面说的遍历删除的原因,对linkedlist的遍历的过程中是不能够进行删除的,有删除操作就会出现错误,可以参考博文:http://www.cnblogs.com/frankliiu-java/articles/1759460.html
如果一定要在遍历过程中删除,可以将for (int i = 0; i < linkedList.list.size(); i++) 改为for (int i = linkedList.list.size()-1; i >=0 ; i--)
谢谢啊,按您的代码程序运行正常了。问题处理好了,现在在弄AES加密的东西,需要用的是128位的CFB模式的AES加密方式,在网上找了下,AES加密的java代码有些,但好像没有找到CFB模式下的128位的代码,应该每个模式的代码实现都不一样,不知道你有相关代码实现的吗,初学java自己编写好像不太现实的??
没有。。自己搜搜看吧。。
#1
好长的一段代码啊,我感觉好像是主线程的删除操作都完成了,添加的线程还在跑
#2
应该不会啊,我在遍历前通过System.out.println(linkedList.list.size());已经能够显示正常数据了的,而且又使用 try {
Thread.sleep(50);
}
catch (InterruptedException e) {}来增加主程序运行时间,不可能添加那几个数据要那么长时间吧,不知道你那里的运行结果如何呢,知道什么原因吗
Thread.sleep(50);
}
catch (InterruptedException e) {}来增加主程序运行时间,不可能添加那几个数据要那么长时间吧,不知道你那里的运行结果如何呢,知道什么原因吗
#3
我把linkedList.list.remove(i);删除指定节点的语句注释掉以后,程序遍历正常显示了所有满足要求的节点,我怀疑可能是linkedlist的遍历问题,当我只要删除其中的某个节点之后,可能遍历的顺序就出现了变化了
#4
我只知道你的thred类木有写run方法。。。
#5
对,那里是有错误,是应该用run,但那不是主要问题,现在找到问题了,就是我上面说的遍历删除的原因,对linkedlist的遍历的过程中是不能够进行删除的,有删除操作就会出现错误,可以参考博文:http://www.cnblogs.com/frankliiu-java/articles/1759460.html
#6
对,那里是有错误,是应该用run,但那不是主要问题,现在找到问题了,就是我上面说的遍历删除的原因,对linkedlist的遍历的过程中是不能够进行删除的,有删除操作就会出现错误,可以参考博文:http://www.cnblogs.com/frankliiu-java/articles/1759460.html
如果一定要在遍历过程中删除,可以将for (int i = 0; i < linkedList.list.size(); i++) 改为for (int i = linkedList.list.size()-1; i >=0 ; i--)
#7
对,那里是有错误,是应该用run,但那不是主要问题,现在找到问题了,就是我上面说的遍历删除的原因,对linkedlist的遍历的过程中是不能够进行删除的,有删除操作就会出现错误,可以参考博文:http://www.cnblogs.com/frankliiu-java/articles/1759460.html
如果一定要在遍历过程中删除,可以将for (int i = 0; i < linkedList.list.size(); i++) 改为for (int i = linkedList.list.size()-1; i >=0 ; i--)
谢谢啊,按您的代码程序运行正常了。问题处理好了,现在在弄AES加密的东西,需要用的是128位的CFB模式的AES加密方式,在网上找了下,AES加密的java代码有些,但好像没有找到CFB模式下的128位的代码,应该每个模式的代码实现都不一样,不知道你有相关代码实现的吗,初学java自己编写好像不太现实的??
#8
对,那里是有错误,是应该用run,但那不是主要问题,现在找到问题了,就是我上面说的遍历删除的原因,对linkedlist的遍历的过程中是不能够进行删除的,有删除操作就会出现错误,可以参考博文:http://www.cnblogs.com/frankliiu-java/articles/1759460.html
如果一定要在遍历过程中删除,可以将for (int i = 0; i < linkedList.list.size(); i++) 改为for (int i = linkedList.list.size()-1; i >=0 ; i--)
谢谢啊,按您的代码程序运行正常了。问题处理好了,现在在弄AES加密的东西,需要用的是128位的CFB模式的AES加密方式,在网上找了下,AES加密的java代码有些,但好像没有找到CFB模式下的128位的代码,应该每个模式的代码实现都不一样,不知道你有相关代码实现的吗,初学java自己编写好像不太现实的??
没有。。自己搜搜看吧。。