{"@context":"http://schema.org","@type":"Question","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol","text":"Предположим, что следующий код работает в приложении, которое использует только единственный поток для вызова changeRoll.\n\u003cpre\u003e\u003ccode class\u003d\"java\"\u003e\n// ClassRoll.java\npublic class ClassRoll {\n    private HashMap students \u003d new HashMap();\n    private void addStudent ( Student stud ) {\n        students.put(stud.getName(), stud) ;\n    }\n\n    private void removeStudent( Student stud ) {\n        students.remove( stud.getName() ) ;\n    }\n\n    public boolean changeRoll( int code, Student stud ) {\n        switch( code ) {\n            case 1: addStudent( stud );\n                    return true ;\n            case 2: removeStudent( stud );\n                    return true ;\n            default : return false ;\n        }\n    }\n\n    public boolean isInRoll(Student stud) {\n        return students.containsKey(stud.getName());\n    }\n}\n\n\n// Student.java\npublic class Student {\n    private String name;\n\n    public Student(String name) {\n        this.name \u003d name;\n    }\n\n    public String getName() {\n        return name;\n    }\n}\n\u003c/code\u003e\u003c/pre\u003e\nНеобходимо изменить код так, чтобы приложение могло безопасно работать с любым числом потоков. Из приведенных вариантов, выберите оптимальный набор изменений, который позволит достичь результата.","headline":"Предположим, что следующий код работает в приложении, которое использует только единственный поток для вызова ","learningResourceType":["programming test","programming course","programming question"],"isPartOf":{"@type":"Course","@id":"https://codegalaxy.io/courses/java-ru","url":"https://codegalaxy.io/courses/java-ru","name":"Java Quiz","description":"Java - объектно-ориентированный кросс-платформенный язык программирования, предназначенный для удобства чтения и интероперабельности. Java обычно читается как легкая и простая версия языка Си++. Тем не менее, Java может использоваться как полная версия для создания приложений, которые могут работать на всех платформах, поддерживающих Java, без необходимости перекомпиляции. В 2020 году Java является самым популярным языком программирования, с которым работают более 9 миллионов разработчиков. \u003cbr\u003e\nЭтот обучающий курс полностью посвящен \u003cstrong\u003eJava языку\u003c/strong\u003e, где вы можете проверить свои знания и ответить на \u003cstrong\u003e вопросы интервью по Java\u003c/strong\u003e. Вы ответите на теоретические и практические вопросы, которые проверяют ваши навыки на понимание \u003cstrong\u003e Java-кода\u003c/strong\u003e и поиска ошибок.\n\u003cbr\u003e\nВы можете вернуться к этому java курсу когда захотите, так как он постоянно обновляется и добавляются новые вопросы и задачки!\n\nПереведено с помощью www.DeepL.com/Translator (бесплатная версия)","provider":{"@type":"Organization","@id":"https://codegalaxy.io","name":"CodeGalaxy","logo":{"@type":"ImageObject","url":"https://codegalaxy.io/app/assets/images/g_code.png","height":"513","width":"513"},"description":"Project aimed to provide new ways in learning programming languages and preparing for the interview."},"image":{"@type":"ImageObject","url":"https://codegalaxy.io/app/assets/images/fb/16x9/share-java-ru.png","height":"630","width":"1200"}},"image":{"@type":"ImageObject","url":"https://codegalaxy.io/app/assets/images/fb/16x9/share-java-ru.png","height":"630","width":"1200"},"answerCount":7,"potentialAction":[{"@type":"AssessAction","object":{"@type":"Question","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol"}},{"@type":"ChooseAction","actionOption":[{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20552","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20552","text":"Сделать метод addStudent синхронизированным.","dateCreated":"2020-02-06"},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20553","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20553","text":"Обьяваить поле students как volatile.","dateCreated":"2020-02-06"},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20554","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20554","text":"Сделать класс синхронизированным.","dateCreated":"2020-02-06"},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20555","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20555","text":"Сделать метод changeRoll синхронизированным.","dateCreated":"2020-02-06"},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20556","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20556","text":"Сделать метод removeStudent синхронизированным.","dateCreated":"2020-02-06"},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20557","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20557","text":"Сделать метод isInRoll синхронизированным","dateCreated":"2020-02-06"}],"object":[{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20555","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20555","text":"Сделать метод changeRoll синхронизированным.","dateCreated":"2020-02-06"},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20557","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20557","text":"Сделать метод isInRoll синхронизированным","dateCreated":"2020-02-06"}]}],"audience":{"@type":"EducationalAudience","audienceType":["developers","programmers"],"educationalRole":["Specialist","Student"],"alternateName":"Java Programmers","name":"Java Developers","sameAs":["https://en.wikipedia.org/wiki/Programmer","https://en.wikipedia.org/wiki/Software_developer","https://en.wikipedia.org/wiki/Software_engineer","https://en.wikipedia.org/wiki/Web_developer"]},"dateCreated":"2020-02-06","acceptedAnswer":[{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#js-expander-trigger","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#js-expander-trigger","text":"Публичными методами, которые имеют доступ к разделяемому ресурсу (хеш-таблице students) являются только changeRoll и isInRoll, поэтому достаточно сделать их вызовы синхронизированными, чтобы решить задачу.","about":{"@type":"Question","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol"},"upvoteCount":1,"dateCreated":"2020-02-06"},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20555","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20555","text":"Сделать метод changeRoll синхронизированным.","dateCreated":"2020-02-06","upvoteCount":1},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20557","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20557","text":"Сделать метод isInRoll синхронизированным","dateCreated":"2020-02-06","upvoteCount":1}],"suggestedAnswer":[{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20552","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20552","text":"Сделать метод addStudent синхронизированным.","dateCreated":"2020-02-06","upvoteCount":0},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20553","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20553","text":"Обьяваить поле students как volatile.","dateCreated":"2020-02-06","upvoteCount":0},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20554","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20554","text":"Сделать класс синхронизированным.","dateCreated":"2020-02-06","upvoteCount":0},{"@type":"Answer","@id":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20556","url":"https://codegalaxy.io/courses/java-ru/questions/599782a94ab549adacd12161eceb31db/predpoloyoim-chto-sleduyushchij-kod-rabotaet-v-priloyoenii-kotoroe-ispolzuet-tol#20556","text":"Сделать метод removeStudent синхронизированным.","dateCreated":"2020-02-06","upvoteCount":0}]}