勿语风🌿 TEL18059029411
关注数: 5 粉丝数: 28 发帖数: 939 关注贴吧数: 40
在多线程中使用ArrayList为啥出现 这个错误? import java.awt.List; import java.util.ArrayList; import java.util.LinkedList; public class Thread13 { public static void main(String[] args) { // TODO Auto-generated method stub Cangku cangku=new Cangku(); Provider p=new Provider(cangku); p.setNum(30); Coustomer c=new Coustomer(cangku); c.setNum(20); Thread t=new Thread(p); Thread a=new Thread(c); t.start(); a.start(); } } class Cangku { private final int MAX_SIZE=100; private final int MIN_SIZE=0; ArrayList<Object> list=new ArrayList<Object>(); public void provider(int num) { synchronized(this) { while(list.size()+num>MAX_SIZE) { System.out.println("要生产的数量:"+num+"------仓库存量:"+list.size()+"-----现在不能生产"); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for(int i=0; i<num; i++) { list.add(new Object()); } System.out.println("已经生产数量:"+num+"------仓库存量"+list.size()); notifyAll(); } } public void coustomer(int num) { synchronized(this) { while(list.size()<num) { System.out.println("要消费的数量:"+num+"------仓库存量:"+list.size()+"-----现在不能消费"); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("已经消费数量:"+num+" "+list.size()); for(int i=0; i<num; i++) { list.remove(i); } System.out.println("已经消费数量:"+num+"------仓库存量"+list.size()); notifyAll(); } } } class Provider implements Runnable { Cangku cangku; private int num; Provider(Cangku cangku) { this.cangku=cangku; } @Override public void run() { // TODO Auto-generated method stub cangku.provider(num); } public void setNum(int num) { this.num = num; } } class Coustomer implements Runnable { Cangku cangku; private int num; Coustomer(Cangku cangku) { this.cangku=cangku; } @Override public void run() { // TODO Auto-generated method stub cangku.coustomer(num); } public void setNum(int num) { this.num = num; } } 出现 Exception in thread "Thread-1" java.lang.IndexOutOfBoundsException: Index: 15, S ize: 15 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.remove(Unknown Source) at Cangku.coustomer(Thread13.java:66) at Coustomer.run(Thread13.java:99) at java.lang.Thread.run(Unknown Source) 这个错误
1 下一页