Как синхронизировать один метод при вызове параллельного потока в Java?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как синхронизировать один метод при вызове параллельного потока в Java?

Сообщение Anonymous »

Я хочу синхронизировать функцию B. Я имею в виду, что когда какой-либо объект Attribute вызывает функциюA, всегда одновременно запускается одна из функций объектаB. Но functionC и functionD в каждом объекте могут сделать это после того, как functionB завершится самостоятельно.
Я пытался добавить синхронизацию в functionB , но похоже, что это не работает.
Это класс Attribute:
public class Attribute {
private String name;

Attribute(String name) {
this.name = name;
}

public void functionA() {
synchronized (this) {
functionB();
}
functionC();
functionD();
}

private void functionB() {
for (int i = 0; i < 5; i++) {
System.out.println(name + " " + i + " time functionB.");
}
}

private void functionC() {
for (int i = 0; i < 5; i++) {
System.out.println(name + " " + i + " time functionC.");
}
}

private void functionD() {
for (int i = 0; i < 5; i++) {
System.out.println(name + " " + i + " time functionD.");
}
}

public static void main(String[] args) throws IOException {
ArrayList attributes = new ArrayList();
for (int i = 0; i < 5; i++) {
attributes.add(new Attribute("No." + i));
}
attributes.parallelStream().forEach(Attribute::functionA);
}
}

После выполнения приведенного выше кода консоль отобразит:
No.3 0 time functionB.
No.4 0 time functionB.
No.2 0 time functionB.
No.2 1 time functionB.
No.2 2 time functionB.
No.1 0 time functionB.
No.1 1 time functionB.
...

Но я этого ожидаю:
No.3 0 time functionB.
No.3 1 time functionB.
No.3 2 time functionB.
No.3 3 time functionB.
No.3 4 time functionB.
No.1 0 time functionB.
No.1 1 time functionB.
No.1 2 time functionB.
No.1 3 time functionB.
No.1 4 time functionB.
No.4 0 time functionB.
No.4 1 time functionB.
...
No.1 1 time functionD.
No.3 3 time functionC.
No.2 3 time functionD.
No.1 2 time functionD.
No.4 2 time functionC.


Подробнее здесь: https://stackoverflow.com/questions/723 ... ll-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»