2014-01-07 71 views
0

嗨,我的java修订我正在经历过去的纸质问题,我被卡住了。我给这个代码:程序中的干扰问题

class FriendFinderThread extends Thread { 
    // number of FriendBook friends 
    int numFriends = 0; 
    public void run() { 
     // join, then leave FriendBook 
     FriendBook.join(this); 
     try { Thread.sleep(10000); } 
     catch (InterruptedException(ie) {} 
     FriendBook.leave(this); 
    } 
} 

class FriendBook { 
    // list of FriendBook members 
    static Vector<FriendFinderThread> members = 
    new Vector<FriendFinderThread>(); 
    static void join(FriendFinderThread f) { 
     // add a new friend to all existing members 
     int size = members.size(); 
     for (int i = 0; i < size; i++) { 
      members.elementAt(i).numFriends++; 
     } 
     f.numFriends = size; // new member’s friends 
     members.add(f); // add to list of members 
    } 
    static void leave(FriendFinderThread f) { 
     members.remove(f); // remove from list 
     int size = members.size(); 
     for (int i = 0; i < size; i++) { 
      members.elementAt(i).numFriends--; 
     } 
    } 
    public static void main() { 
     for (int n = 0; n < 100; n++) { 
      new FriendFinderThread().start(); 
     } 
    } 
} 

我有真正的麻烦理解是怎么回事,可能有人请解释什么是在代码发生怎样的代码可能有干扰问题。

谢谢

回答

0

在某一点上,一个线程将调用连接。这使用members.size()并访问成员中的每个元素。虽然这样做会让其他成员离开(后面的线程会循环更多的元素,所以在某些时候会有更多的离开而不是加入)。这意味着members.elementAt(members.size() - 1)会抛出一个错误。