powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация
3 сообщений из 3, страница 1 из 1
Синхронизация
    #39434494
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос довольно абстрактный. В одной светской беседе увидел такой кусок кода:
Код: java
1.
2.
3.
4.
5.
void synchronized t() {
   if (someObject.compareAndSet()) {
       ....
   }
}


Этот кусок кода наречен "говнокодом". Действительно ли тут всегда или synchronized или cas избыточен?
В голову сразу приходит, что надо синхронизировать данные и на уровне метода и на уровне какого-то глобального счетчика. Или такой пример неверный?

Псевдокод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Starter {
    public static void main(String[] arg) {
        AtomicInteger someObject = new AtomicInteger(0);
        Wrapper wrapper1 = new Wrapper(someObject);
        Wrapper wrapper2 = new Wrapper(someObject);
        Wrapper wrapper3 = new Wrapper(someObject);

        AnotherWrapper anotherWrapper1 = new AnotherWrapper(someObject);
        AnotherWrapper anotherWrapper2 = new AnotherWrapper(someObject);
        AnotherWrapper anotherWrapper3 = new AnotherWrapper(someObject);

        // как-то в нескольких потоках меняем someObject
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class Wrapper {
    Integer value;
    final AtomicInteger someObject;

    public Wrapper(AtomicInteger someObject) {
        this.someObject = someObject;
    }

    public synchronized Integer getValue() {
        return value;
    } 

    public synchronized void updateValue() {
        if (someObject.compareAndSet(x, y)) {
            // как-то меняем value и someObject
        }
    } 
}

...
Рейтинг: 0 / 0
Синхронизация
    #39434500
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну всякие ситуации бывают, но говнокод это потому что смешаны стили синхронизации, сразу когнитивный диссонанс, почему так а не иначе? На первый взгляд выглядит как человек не знает как решить проблему и напихал все что туда можно.. Конечно в одном случае из 1000 это окажется код Дуга Ли .......
...
Рейтинг: 0 / 0
Синхронизация
    #39434513
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае - код может быть правильным. синхронизация там может быть для чего-то одного с одним потоком, а атомарный счетчик - совсем с другим потоком, в котором синхронизации нет.
Это например.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]