Я хочу синхронизировать функцию 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 общаются здесь
1719594936
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.
Подробнее здесь: [url]https://stackoverflow.com/questions/72345155/how-to-synchronize-one-method-in-parallelstream-call-in-java[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия