无聊测ArrayList安全性问题的时候写了一段代码出现出现下标越界 arraylist安全javathread 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有点不理解了,我定义list大小时才会运行正常,这个是什么原因 线程不安全,直观的改进就是“list.add(i);”加锁 谢谢 是你给了我想法,我的猜想是其中一个线程在添加元素时定义了list的大小并且list容器已经填满,此时另外一个进程也对list元素执行添加操作导致下标越界的异常。解决办法:对add方法加类锁或者用Collections.synchronizedList,或者直接用Vectorlist内部实现就是数组,当我们在new一个ArrayList时其实就new了一个数组其大小也是定义好的,在jdk1.5ArryList的大小是10,所以110已经很大了。 public class ContainerSyn implements Runnable { private Object obj; static List<Integer> list = new ArrayList<Integer>(); ContainerSyn(Object obj) { this.obj = obj; } public static void main(String[] args) throws InterruptedException { Object obj = new Object(); Thread t1 = new Thread(new ContainerSyn(obj), "Thread1"); Thread t2 = new Thread(new ContainerSyn(obj), "Thread2"); Thread t3 = new Thread(new ContainerSyn(obj), "Thread3"); t1.start(); t2.start(); t3.start(); t1.join(); t2.join(); t3.join(); System.out.println("list size is " + list.size()); } @Override public void run() { for (int i = 0; i < 110; i++) { synchronized (obj) { list.add(i); } } }} Eclipse应该怎么改快捷键? java客户端怎么传递多个字符串给服务器 线程:为什么start()后没有先执行run()中的内容, 这个错误是因为什么?Exception in thread "main" java.lang.NoClassDefFoundError:Example 救命!得到数组返回值时的错误! 一个map 问题.大虾来看下 applet问题!急~ 高分在线求助:java中如何实现音量控制?? 关于getClass()的疑问 字符串替换 file类实例化,就是创建了对象 求教该怎样做好这个要求苛刻的负载测试工具(可用分全给了)
解决办法:对add方法加类锁或者用Collections.synchronizedList,或者直接用Vector
list内部实现就是数组,当我们在new一个ArrayList时其实就new了一个数组其大小也是定义好的,在jdk1.5ArryList的大小是10,所以110已经很大了。
private Object obj;
static List<Integer> list = new ArrayList<Integer>(); ContainerSyn(Object obj) {
this.obj = obj;
} public static void main(String[] args) throws InterruptedException {
Object obj = new Object();
Thread t1 = new Thread(new ContainerSyn(obj), "Thread1");
Thread t2 = new Thread(new ContainerSyn(obj), "Thread2");
Thread t3 = new Thread(new ContainerSyn(obj), "Thread3");
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println("list size is " + list.size());
} @Override
public void run() {
for (int i = 0; i < 110; i++) {
synchronized (obj) {
list.add(i);
}
}
}
}