无聊测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); } } }} 进度条无法更新,只在完成的时候更新一次 java优先级问题 各位前辈,小生有点问题! java题求解 关于switch和if-else的性能问题,在线等回复 我很迷茫,思想很乱! Applet如果用到其他包了,如果要發布道網上,瀏覽器那端如果沒有裝jre怎麼辦? 请高手给我指点一下下面代码生成对象的个数 询问几本关于JAVA学习的书哪里可以下载? SQL小知识 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);
}
}
}
}