Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 616

Wait-Notify не работает

09.12.2021, 19:18. Показов 560. Ответов 0

Студворк — интернет-сервис помощи студентам
Первый поток определяет количество пробелов в файле, если количество пробелов четное - второй поток делает первые буквы всех слов в файле заглавными, если нечетные - последние буквы. С ожиданием и уведомлением.Почему count во всех трех потоках 0?


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
public class Dispatcher {
 
    public static void main(String[] args) {
 
 
        FileHandler[] fileHandlers = {
                new FileHandler(new File("text.txt")),
                new FileHandler(new File("text2.txt")),
                new FileHandler(new File("text3.txt"))
        };
 
        new CountSpaces(fileHandlers);
        new ChangeText(fileHandlers);
    }
 
}
 
class CountSpaces extends Thread{
    FileHandler[] fileHandler;
 
    public CountSpaces(FileHandler[] fileHandlers) {
        this.fileHandler = fileHandlers;
    }
 
    @Override
    public void run() {
        for (FileHandler fileHandler : fileHandler) {
            fileHandler.countSpace();
            new Thread(this, "CountSpaces").start();
        }
 
    }
}
 
class ChangeText extends Thread {
    FileHandler[] fileHandler;
 
    public ChangeText(FileHandler[] fileHandlers) {
        this.fileHandler = fileHandlers;
        new Thread(this, "ChangeText").start();
    }
 
    @Override
    public void run() {
        for (FileHandler fileHandler : fileHandler) {
            try {
                fileHandler.changeLetters();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 
}
 
class FileHandler {
    boolean valueSet = false;
    int count;
    File file;
 
    public FileHandler(File file) {
        this.file = file;
    }
 
    synchronized void countSpace() {
        while (!valueSet) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        try (Scanner sc = new Scanner(file)) {
                while (sc.hasNext()) {
                    count++;
                    sc.next();
            }
            valueSet = true;
            notify();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    synchronized void changeLetters() throws InterruptedException {
        while (valueSet) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        try (Scanner sc = new Scanner(file);
             PrintWriter printWriter = new PrintWriter(file + "result")) {
            System.out.println(count);
            if (count % 2 == 0) {
                            while (sc.hasNext()) {
                                String word = sc.next();
                                printWriter.print(word.substring(0, 1).toUpperCase() + word.substring(1));
                            }
                        } else  {
                            while (sc.hasNext()) {
                                String word = sc.next();
                                printWriter.print(word.substring(1, word.length() - 1)
                                        + word.substring(word.length() - 1).toUpperCase());
                            }
                        }
                        valueSet = false;
                        notify();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2021, 19:18
Ответы с готовыми решениями:

Методы wait() и notify()
class Blocked { public synchronized void doWait() { try { System.out.print("Не "); this.wait();...

Синхронизация. Wait(). Notify().
Задание-1 поток в цикле увеличивает значение переменной, другой печатает это значение. Проблема-выполняется только первая итерация....

Потоки. Wait, notify
Нужно создать программу, реализующую работу с потоками с помощью wait, notify. Когда два потока обращаются к одному файлу по очереди для...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.12.2021, 19:18
Помогаю со студенческими работами здесь

Многопоточность. wait(), notify()
Здравствуйте, в Шилдте есть пример: //Правильная реализация поставщика и потребителя package PCFixed; class Q { int n; ...

Синхронизация потоков wait и notify
Народ помогите понять. Делаю два анонимных внутренних класса. Суть в том что второй анонимный класс находиться в ожидании, а первый когда...

Зачем synchronized вокруг wait/notify?
Добрый день! Хочу прояснить свое понимание в данном вопросе. На сколько мне известно synchronized позволяет только одному потоку...

Особенности поведения методов wait, notify, notifyAll
Доброго времени суток. Возникло несколько вопросов связанных с поведением методов wait, notify, notifyAll. Я понимаю как работают эти...

Обращение к файлу. wait(), notify(), notifyAll(), Runnable
"Продемонстрировать программу, в которой разные потоки обращаются к файлу, используя методы wait(), notify(), notifyAll(). Для разработки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru