程序中的干扰问题

时间:2014-01-07 13:52:44

标签: java multithreading

嗨,对于我的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();
        }
    }
}

我在理解正在发生的事情时遇到了麻烦,有人可以解释一下代码中发生的事情以及代码可能会遇到干扰问题。

谢谢

1 个答案:

答案 0 :(得分:0)

在某个时刻,一个线程会调用join。这使用members.size()并访问成员中的每个元素。在这样做的同时,另一个成员将离开(后面的线程将越慢,因为它们越过更多的元素,所以在某些时候会有更多的离开而不是加入)。这意味着members.elementAt(members.size() - 1)将抛出错误。