Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
42 / 42 / 5
Регистрация: 20.01.2015
Сообщений: 279

Подскажите с wait notify

19.01.2018, 11:09. Показов 649. Ответов 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
public class WaitNotify {
    // Есть два потока А и В в каждом цикл.
    // когда поток досчитает до 5 он засыпает. Когда поток В
    // отработает будим поток А
    public static void main(String[] args) {
        C c = new C();
        A obA = new A(c);
        B obB = new B(c);
        try {
            obA.getT().join();
            obB.getT().join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
// ==============================================================
class A implements Runnable {
    private Thread t = new Thread(this, "ThreadA");
    private C c;
//----------------------------------------------
    public A(C c) {
        this.c = c;
        t.start();
    }
// -------------------------------------------------------
    public Thread getT() {
        return t;
    }
// -------------------------------------------------------
    @Override
    public void run() {
        synchronized (c) {
            try {
                for (int i = 0; i < 10; i++) {
                    System.out.println("работает поток " + t.getName() + "  "
                            + i);
                    Thread.sleep(1000);
                    if (i == 5) {//посчитали до 5 
                        c.permis=true;//устанавливаем флаг чтобы перевести поток в wait
                        System.out.println("поток " + t.getName() + " "
                                + "в режиме wait");
                    }
                    while (c.permis) {//переводим поток  wait
                        wait();//в этой строке ошибка
                    }
                }
            } catch (InterruptedException e) {
                e.getStackTrace();
            }
        }
    }
}
// ===============================================================
class B implements Runnable {
    private Thread t = new Thread(this, "ThreadB");
    private C c;
//----------------------------------------------------------
    public B(C c) {
        this.c = c;
        t.start();
    }
// -------------------------------------------------------
    public Thread getT() {
        return t;
    }
// -------------------------------------------------------
    @Override
    public void run() {
        synchronized (c) {
            try {
                for (int i = 0; i < 10; i++) {
                    System.out.println("работает поток " + t.getName() + "  "
                            + i);
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                e.getStackTrace();
            }
            c.permis=false;
            notify();// поток отработал пробуждаем поток А здесь ошибка
        }
    }
}
// ==============================================================
class C {// здесь флаг разрешения работе потока и для синхронизации
    boolean permis=false;
}
Добавлено через 1 час 31 минуту
Вопрос снят. Вдруг кому пригодиться надо было указать объект в котором вызывается монитор. c.wait(), c.notify()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.01.2018, 11:09
Ответы с готовыми решениями:

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

Подскажите КАК сделать курсор мыши в WAIT для окошка?
Всем привет! Из апплета открывается окошко (Frame) мы там чтото вводим затем нажимаем кнопку и запускаем процедурку. Надо чтобы это...

Метод 'wait' в контексте апплета.
wait() generiruet java.lang.IllegalMonitorStateException chto tak i doljno bilo bit? togda chem zamenit'? zarane blogadaren

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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 физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru