Предположим, что следующий код работает в приложении, которое использует только единственный поток для вызова changeRoll.

// ClassRoll.java
public class ClassRoll {
    private HashMap students = new HashMap();
    private void addStudent ( Student stud ) {
        students.put(stud.getName(), stud) ;
    }

    private void removeStudent( Student stud ) {
        students.remove( stud.getName() ) ;
    }

    public boolean changeRoll( int code, Student stud ) {
        switch( code ) {
            case 1: addStudent( stud );
                    return true ;
            case 2: removeStudent( stud );
                    return true ;
            default : return false ;
        }
    }

    public boolean isInRoll(Student stud) {
        return students.containsKey(stud.getName());
    }
}


// Student.java
public class Student {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
Необходимо изменить код так, чтобы приложение могло безопасно работать с любым числом потоков. Из приведенных вариантов, выберите оптимальный набор изменений, который позволит достичь результата.
Explanation
Публичными методами, которые имеют доступ к разделяемому ресурсу (хеш-таблице students) являются только changeRoll и isInRoll, поэтому достаточно сделать их вызовы синхронизированными, чтобы решить задачу.

Follow CodeGalaxy

Mobile Beta

Get it on Google Play
Send Feedback
Keep exploring
Java quizzes
Cosmo
Sign Up Now
or Subscribe for future quizzes