Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873

Простой пример по потокам

01.12.2014, 13:40. Показов 731. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу написать следующий пример
Есть два потока
Первый читает входной поток(просто читает с консоли)
если вводят в консоль 10, то пробуждает второй поток с помощью notify, который выводит сообщение в консоль, что он проснулся
Очень прошу весь код
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2014, 13:40
Ответы с готовыми решениями:

простой пример!
помогите пожалуйста, скажите в чем моя ошибка. Я только начинаю учиться работать на Java. public class Proba1 { public void...

Простой пример
есть функция boolean array123(int nums) , которая должна возвратить true если в массиве nums есть последовательность 1,2,3. int...

Простой пример полиморфизма
class A { void m1(A a) { System.out.print("A"); } } class B extends A { void m1(B b) { ...

10
44 / 44 / 37
Регистрация: 11.12.2012
Сообщений: 200
Записей в блоге: 2
01.12.2014, 18:04
Без notify

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String... args){
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        System.out.println("Вводите числа");
        while(true){
            try {
                int readscanner = scanner.nextInt();
                if(readscanner == 10){
                    Thread thread = new Thread();
                    thread.start();
                    System.out.println("Поток запущен");
                }
            } catch (InputMismatchException e) {
                System.out.println("Проверьте правильность ввода");
            }
        }
    }
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
01.12.2014, 22:55  [ТС]
спасибо, конечно, но, интересно именно с notify

Добавлено через 55 секунд
и в вашем коде сообщение о том, что поток запущен будет выведено из потока номер 1

Добавлено через 27 секунд
а не из потока 2. тип он спал и вот его пробудили
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
02.12.2014, 01:36
spydark91, так вы оказывается сами во всем разбираетесь.
Набросайте сами костяк программы, а мы подскажем что допилить.
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
02.12.2014, 21:35  [ТС]
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
public class Work3 {
    public static void main(String[] args) {
        System.out.println("start");
        Scanner scanner = new Scanner(System.in);
        myThread thread = new myThread();
        thread.start();// запустит run. в чер разница между ним и run? можно ли его не вызывать, а потом просто вызвать notify
    //    thread.stop();//устарелый. что вместо?
        while(true){
            try {
                int readscanner = scanner.nextInt();
                if(readscanner == 10){
                   thread.notify();
                }
            } catch (Exception e) {
               
            }
        }   
    }
}
 
 
class myThread extends Thread {
    public void run() {
    System.out.println("s");    
    }
    
}
сейчас выводит
start
s

если ввожу 10, то ничего не происходит
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
02.12.2014, 22:40
Цитата Сообщение от spydark91 Посмотреть сообщение
запустит run. в чер разница между ним и run?
run вызывается в том же потоке. start - запускает новый.
Цитата Сообщение от spydark91 Посмотреть сообщение
thread.stop();//устарелый. что вместо?
Поток нельзя насильно останавливать, необходимо дать ему завершиться.
Цитата Сообщение от spydark91 Посмотреть сообщение
если ввожу 10, то ничего не происходит
Чтобы второй можно было пробудить, его надо сначала усыпить: метод wait(). Главное что необходимо понять - вызывать wait и notify нужно на одном и том же объекте.
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
02.12.2014, 22:51  [ТС]
у этого же объекта можно вызвать notifyAll
но этот метод, на сколько я знаю, отсылает сигнал пробуждения всем спящим потокам, чтобы случайный из них стал выполняться, а остальные заснули обратно

допустим есть 2 разных спящих потока-объекта
у одного из них вызвал notyfyall
получается что будет выполняться случайный из этих двух?
0
 Аватар для ne2win
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
02.12.2014, 23:12
Вызвать notifyAll можно, только из действующего потока. Спящий поток ожидает пока его кто-нибудь пробудит
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
02.12.2014, 23:40  [ТС]
Kochmarik, я спрашивал совсем не это
я спрашивла может ли пробудиться объект2 если я вызвал объект1.notyfyAll()
0
 Аватар для ne2win
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
03.12.2014, 00:04
Пробуждается не объект, а поток.... Потоки, которые захватили объект блокировки второго объекта, конечно же не пробудятся при таком раскладе.
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.12.2014, 19:40  [ТС]
а в чем тогда разница? вызову я notify или notifyAll

Добавлено через 29 секунд
можете объяснить для чего служат synchronized методы

Добавлено через 11 минут
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
public class Work3 {
    public static void main(String[] args) {
        try {
            System.out.println("start");
            Scanner scanner = new Scanner(System.in);
            myThread thread = new myThread();
            thread.start();
            Object monitor = new Object();
            synchronized (monitor) {
                thread.wait();  
            }
            
            while(true){
                try {
                    if(scanner.nextInt() == 10){
                        synchronized (monitor) {
                            thread.notify();    
                        }
                       
                    }
                } catch (Exception e) {
                   
                }
            }   
        } catch (Exception e1) {
            System.out.println("err");  
        }
    }
}
 
 
class myThread extends Thread {
    public void run() {
    System.out.println("s");    
    }
}
выводит
C
1
2
3
start
err
s
хотя я ничего не вводил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2014, 19:40
Помогаю со студенческими работами здесь

Простой пример потоков
public class ClassForStudy { public static void main(String args){ theThread t1 = new theThread("один"); ...

Нужен пример простой игры
Ребята скиньте пожалуйста простую игру на джава начинающему программисту :)

Нужен простой пример программы с интерфейсом
нужно разработать простое единое приложение, которое включает в себя написание и использованием по меньшей мере три различных...

Простой пример создания нового потока с интерфейсом Runnable
public class theThread implements Runnable{ Thread t; theThread(){ t = new Thread(this, "Demo Thread"); ...

Не могу разобраться с классом Thread. (пример простой внутри)
class MyThread extends Thread { String str; MyThread (String str) { this.str = str; } public void run () {


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru