Я хочу синхронизировать функцию 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
Как синхронизировать один метод при вызове параллельного потока в Java? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сколько структур данных создается при сборе с помощью параллельного потока Java?
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Spring SecurityContext недоступен при использовании параллельного потока
Anonymous » » в форуме JAVA - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как закоротить при использовании параллельного потока с фильтром и findFirst
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-