Явский класс Ориентированные на многопотоковое исполнение методы, для сертификации 1Z0-851 экзамена

Я изучаю для явской 1Z0-851 Oracla сертификации SE 1.6, и я видел этот вопрос:

question 4

Кто-либо может объяснить меня этот ответ?

И скажите, правилен ли я, когда я думаю этот путь: если doThings() статичен, только один доступ может быть сделан временем несмотря на то, когда метод не статичный однажды каждый TestSeven , объект получил бы доступ к doThings, в то же время изменяющему стоимость x несовместимо.

Я правилен при размышлении этого пути?

Спасибо.

3
nl ja de

4 ответы

Да вот именно. В данный момент, если вы создаете два случая TestSeven и называете их doThings метод от 2 различных нитей, у вас нет гарантии, что x будет увеличен дважды. Например, следующее выполнение законно (T1, и T2 - две нити):

T1: current = x //0
T2: current = x //0
T1: current++;//1
T2: current++;//1
T1: x = current;//1
T2: x = current;//1

Таким образом, вы назвали метод дважды, но x был увеличен только однажды.

Если вы сделаете метод статичным, только одна нить будет в состоянии выполнить его в данный момент, даже если вы создадите много случаев.

4
добавлено
@thiagoh да это достигло бы того же самого: вы могли использовать любой статический объект в качестве замка (TestSeven.class - одна возможность).
добавлено автор assylias, источник
Правильный, вы могли использовать синхронизированный блок, где замок - класс (или другая произвольная статическая область).
добавлено автор Steven Benitez, источник
хороший! это - то, что я думал.. Я мог сделать синхронизированный (TestSeven.class) {} вместо того, чтобы делать этот метод статичным также??
добавлено автор thiagoh, источник
хороший @assylias!!
добавлено автор thiagoh, источник

doThings() метод - метод экземпляра и читает и пишет статической переменной x . Делая doThings() статичный, это будет синхронизировано через все случаи (внутренний замок на классе, а не на случае). Другими словами, поскольку это в настоящее время стоит, метод может быть призван одновременно многократными нитями, тогда как создание его статичный предотвратило бы это.

2
добавлено

Это не ориентировано на многопотоковое исполнение, потому что x объем "статичен", т.е. весь случай классов может получить доступ к нему, и doThings , методы не. Таким образом, это синхронизировало только на экземпляре класса.

Поэтому может быть два случая классов, получающие доступ <�к ним> x в то же самое время несмотря на синхронизированное ключевое слово.

Создание статичного метода гарантировало бы его, чтобы быть названным только однажды за один раз.

2
добавлено

Если x не будет отмечен статичный тогда, то класс будет ориентирован на многопотоковое исполнение?

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async