import java.util.Random;
import java.util.Vector;
import java.util.LinkedList;
public class test{
public static void main(String[] args){
new CreatThread(5,100);
}
}
class CreatThread extends Thread{
private Object obj;
private int M;//存储总量
private int N;//窗口个数
private Vector<Integer> store;
private LinkedList<Integer> h[];
public CreatThread(int N,int M){
this.M=M;
this.N=N;
store=new Vector<Integer>();
this.store.setSize(N);//存储总量
for(int i=0;i<store.size();i++){
store.add(i);//出现错误?????????
}
for(int i=0;i<M;i++){
h[i]=new LinkedList<Integer>();
}
}
public void run(){
synchronized(obj){
int i=0;
while(i<this.M){
Random ra=new Random();
int num=ra.nextInt(this.M);
if(store.contains(num)){
GetThreadArray(Thread.currentThread().getName()).add(num);
store.remove(store.indexOf(num));
}
}
}
}

public LinkedList<Integer> GetThreadArray(String name){
if(name.equals("thread1"))
return h[0];
if(name.equals("thread2"))
return h[1];
if(name.equals("thread3"))
return h[2];
if(name.equals("thread4"))
return h[3];
else 
return h[4];

}
}
为什么会出现这种错误?????

解决方案 »

  1.   

    for(int i=0;i<store.size();i++){
    store.add(i);//出现错误?????????
    }
    当你每天加一个元素的时候 向量的size就自增一 这样永远也满足不了结束循环的条件,最后导致内存溢出你可以这样改
    for(int i=0;i<N;i++){
    store.add(i);//出现错误?????????
    }
      

  2.   

    Effective java书上有你得这种情况说明,要将其设为null
      

  3.   

    应该改成M,当我改成M后但有出现了java.lang.NullPointerException在h[i]=new LinkedList<Integer>();这儿???????????