这两个a对象不在同一个范围里面
比如:
for(int i=0;i<vector1.size();i++){
  //do something
}
for(int i=0;i<vector2.size();i++){
  //do something
}
可以重复定义i变量
在if,while和不同方法区间也是一样,
他们是局部变量,互不干涉

解决方案 »

  1.   

    我说的是在a没释放前,又实例化一线程对象,也命名为a 在a释放后,再实例化一线程对象,也命名为a,当然可以了。
      

  2.   

    public class receiveServer{ final int RECEIVE_PORT=9090;  public receiveServer() { 
    ServerSocket rServer=null;   
    Socket request=null;
    Thread receiveThread=null; 
    try{ 
    rServer=new ServerSocket(RECEIVE_PORT);  
    while(true){ 
    request=rServer.accept();  
    receiveThread=new serverThread(request); 
    receiveThread.start(); 
          } 
        }catch(IOException e){ 
      System.out.println(e.getMessage());} 
      }  
       
      public static void main(String args[]){ 
        new receiveServer(); 
      }
    }serverThread是Thread的子类
      

  3.   

    看了你的代码。没有发现你重复实例化啊
    new serverThread(request); 就这里一次而已
    你大概是说while里面重复是吗?
    receiveThread是个引用,你不断得产生新的对象,然后用receiveThread去指向它
    所以不是重复,而是修改引用指向的对象
    而以前产生的对象就只能等待回收了
      

  4.   

    每接收一个请求,引用都指向一个新的serverThread线程对象?另外 receiveThread为何是个引用,而不是个serverThread线程对象呢?
      

  5.   

    引用指向对象存在的地方,然后就可以通过引用操作对象了
    所以看上去receiveThread好象就是个对象了,其实用receiveThread
    操作的是那个对象,比如,喝水吧,不能直接拿水,用杯子装
    杯子就是引用了,水是对象,你可以再往杯子装新水,就是产生新的对象
    旧的就不见了,没杯子装的话,jvm就会回收它,当作垃圾
      

  6.   

    看来你以前是搞C++的,是吗?
    记住一点,java里的所有对象的变量名称都是引用。
      

  7.   

    上例中,receiveThread 虽然引用了新的对象,但是已经start()的线程在线程run()方法 return 之前并没有被GC回收的危险的。