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