Предположим, что следующий код работает в приложении, которое использует только единственный поток для вызова 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, поэтому достаточно сделать их вызовы синхронизированными, чтобы решить задачу.

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Продовжуйте вивчати
тести з Java
Cosmo
Зареєструйся Зараз
або Підпишись на майбутні тести