проверял разными способами, где ошибка ?
package com.javarush.task.task16.task1632;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
Клубок
*/
public class Solution {
public static List<Thread> threads = new ArrayList<>(5);
static {
MessageStop numbersSum = new MessageStop();
numbersSum.start();
numbersSum.showWarning();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(numbersSum.isAlive());
threads.add(new Infinity());
threads.add(new Exception());
threads.add(new Ura());
threads.add(new MessageStop());
threads.add(new NumbersSum());
}
public static void main(String[] args) {
}
public static class Infinity extends Thread {
@Override
public void run() {
while (true) {
super.run();
}
}
}
public static class Exception extends Thread {
public void run() {
try {
throw new InterruptedException();
} catch (InterruptedException e) {
System.out.println("InterruptedException");
}
}
}
public static class Ura extends Thread {
public void run() {
while (true) {
System.out.println("Ура");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public static class MessageStop extends Thread implements Message {
@Override
public void showWarning() {
this.interrupted();
}
@Override
public void run() {
while (!isInterrupted()) {
}
}
}
public static class NumbersSum extends Thread {
@Override
public void run() {
int sum = 0;
while (true) {
Scanner scanner = new Scanner(System.in);
String volume = scanner.nextLine();
if (volume.equals("N")) {
System.out.print(sum);
break;
} else {
try {
sum += Integer.parseInt(volume);
} catch (NumberFormatException e) {
volume = scanner.nextLine();
}
}
}
}
}
}
Javac
19 уровень
Почему не получается повлиять на параметр isInterrupted()
Обсуждается
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
AshimmuExpert
17 марта 2023, 18:54
надо использовать метод interrupt(), а не interrupted()
0
Javac
17 марта 2023, 19:04
спасибо большое
конечно хотелось бы знать разницу, но в инете найду это спс
0
Javac
18 марта 2023, 02:15
в чем отличие interrupt(), от interrupted()? описания особо не нашел
0
AshimmuExpert
18 марта 2023, 05:02
Если кратко, то
interrupt() прерывает нить,
а interrupted() проверяет, была ли прервана текущая нить, но не прерывает ее.
В этом плане intrrupted() скорее похож на метод isInterrupted(). Но interrupted() является статическим и проверяет текущую нить, а isInterrupted() - это метод экземпляра, который проверяет объект нити, для которой он вызывается
0
Javac
18 марта 2023, 10:23
я пробовал interrupted тоже прирывает нить , меняя значение прирывателя, но получилось его вызвать только вне нити . Точнее у конкретной нити, после ее запуска. А вот внутри нити данный метод отказывался менять параметр, что и ввело меня в заблуждение
0
Lexman (Алексей)Full Stack Developer в TrendSoft
17 марта 2023, 15:36
1.2. Нить 2 должна выводить "InterruptedException" при возникновении исключения InterruptedException;
В вашем случае она всегда будет выводить "InterruptedException", так как вы зачем-то сами создаете исключение
1.5. Нить 5 должна читать с консоли числа пока не введено слово "N", а потом вывести в консоль сумму введенных чисел.
С точки зрения работы кода, написано неудовлетворительно, вы каждый раз создаете Scanner, вы зачем-то пытаетесь парсить строку, когда у класса Scanner есть встроенный метод для этого
0
Javac
17 марта 2023, 15:39
я разве это спрашивал ?
на счет исключения! Вы правильный ответ видели как выглядит ?
0
Javac
17 марта 2023, 15:26
тоже самое и при использование такого написания :
public void run() {
int sum = 0;
while (!this.isInterrupted()) {
Scanner scanner = new Scanner(System.in);
String volume = scanner.nextLine();
if (volume.equals("N")) {
System.out.print(sum);
interrupted();
} else {
try {
sum += Integer.parseInt(volume);
} catch (NumberFormatException e) {
volume = scanner.nextLine();
}
}
0