Вид транзакции в Java SE

Есть ли способ создать вид транзакций, используя только Java SE? Например, у нас есть некоторый класс с main и методом ввода. Что мы делаем, так это вводим в консоль некоторые числа, добавляем их в список, а затем возвращаем этот список. Но, если пользователь не введет в консоль ни одного числа в течение 5 секунд - программа очищает наш список, возвращает этот пустой список и останавливается.

И фиктивный код, например:

public class SomeClass {
    public static void main(String[] args) {
        inputNumbers().forEach(System.out::println);
    }

    public List<String> inputNumbers() {
        Scanner scanner = new Scanner(System.in);
        List<String> result = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            result.add(scanner.nextLine());

            //if nothing happen within 5 sec
            //result.clear();
            //return out empty result;    
        }

        return result;
    }
}

@MichałZiober У этого возможного дубликата также есть возможный дубликат ...

Twometer 29.01.2019 18:52

Да, "дублирование" - обычное дело. Я указал на это только для того, чтобы увеличить вероятность того, что на этот вопрос будет дан правильный ответ.

Michał Ziober 29.01.2019 19:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Взгляните на документацию класса Java TimerTask. Предусмотрены методы для выполнения таких вещей по расписанию.

Вот один из вариантов использования задачи Timer и робота AWT.

public class SomeClass {

    private volatile boolean exitFlag = false;

    public static void main(String[] args) {
        new SomeClass().inputNumbers().forEach(System.out::println);
    }

    public List<String> inputNumbers() {
        Scanner scanner = new Scanner(System.in);
        List<String> result = new ArrayList<>();
        Timer t = setTimer(5000);
        for (int i = 0; i < 10; i++) {
            result.add(scanner.nextLine());
            if (exitFlag) {
                break;
            }
        }
        scanner.close();
        t.cancel();
        return result;
    }

    private Timer setTimer(int delay) {
        Timer t = new Timer();
        t.schedule( 
                new java.util.TimerTask() {
                    @Override
                    public void run() {
                        Robot robot;
                        try {
                            robot = new Robot();
                            robot.keyPress(KeyEvent.VK_ENTER);
                            exitFlag = true;
                        } catch (AWTException e) {
                            e.printStackTrace();
                        }

                    }
                }, 
                delay 
        );
        return t;
    }
}

Я не думаю, что вы должны полагаться на виртуальное нажатие клавиши в этом отношении.

Twometer 29.01.2019 18:51

Другие вопросы по теме