Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Таймер в потоке / 9 сообщений из 9, страница 1 из 1
27.04.2020, 18:30
    #39952052
extra_dj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
Приветствую! работаю над задачей мониторинга выполнения запросов, появилась необходимость проверки процесса через определенное время. подскажите, пожалуйста, как правильно реализовать опрос метода?
в моем понимании, необходим еще один поток, который будет проверять, выполняется ли поток. с какой сороны мне подойти? пока остановился на этом:

Код: 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.
public class MyTimerTask implements Runnable {

    String name;
    private boolean isActive;

    void disable(){
        isActive=false;
    }

    MyTimerTask(String name){
        isActive = true;
        this.name = name;
        run();
    }

        @Override
        public void run() {
                System.out.println(name + " начал свое выполнение в:" + new Date());
                try {
                    completeTask();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(name + " закончил свое выполнение в:" + new Date());

        }
        private void completeTask() throws InterruptedException {
                 for(int i = 0; i<10;i++){
                     System.out.println(i);
                     Thread.sleep(1000);
                 }
        }


        public static void main(String args[]){
        
            new MyTimerTask("device");
        }
    }
...
Рейтинг: 0 / 0
27.04.2020, 18:46
    #39952056
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
необходим еще один поток, который будет проверять, выполняется ли поток
Это сложный и философский вопрос.

Вот если представить что есть процесс ОС Linux и он в течение 5 минут не пишет и не читает диск.
То можно ли считать что он выполняется? Или не выполняется?

Скорее всего без понимания архитектуры того процесса который мы хотим мониторить, ответить на этот
вопрос невозможно.

Что происходить внутри

Код: java
1.
completeTask();



?

Там есть какой-то сердечный ритм? Heart-beat? Там есть какая-то диаграмма переходов из состояния в состояние?
...
Рейтинг: 0 / 0
27.04.2020, 19:03
    #39952058
extra_dj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
mayton,
по сути, в completeTask будет ответ от шедулера линукса о том, что процесс завершен. и в этот момент необходимо закрыть поток с таймером. также таймер должен срабатывать раз в n кол-во времени и проверять, пришел ответ (закончился процесс) или нет
...
Рейтинг: 0 / 0
27.04.2020, 19:07
    #39952060
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
В коде что ты написал нет по сути никакого мониторинга. Из полезного там - логгирование.

Может быть тебе нужно нечто вроде

Код: java
1.
wait10secondAndDie(…)



?
...
Рейтинг: 0 / 0
27.04.2020, 19:21
    #39952063
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
extra_dj
Код: java
1.
Thread.sleep(1000);

Отстреливать из рогатки. И уже давно.
Персонально для вас в классе Process Java8 появился waitFor с таймаутом.

P.S.
Специально сделал ссылку на доку Java11, поскольку это модуляризированная LTS-версия, а в Java9 появились разные плюшки и усовершенствования типа ProcessHandel.
...
Рейтинг: 0 / 0
27.04.2020, 19:32
    #39952067
extra_dj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
mayton,
нет. в completeTask будет выполнятся процесс. можно смоделировать, что когда появится 8, надо останавливать поток, писать лог. а до этого проверять все остальные цифры. это если приблизить ситуацию к более реальной
...
Рейтинг: 0 / 0
27.04.2020, 19:41
    #39952072
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
extra_dj
mayton,
нет. в completeTask будет выполнятся процесс. можно смоделировать, что когда появится 8, надо останавливать поток, писать лог. а до этого проверять все остальные цифры. это если приблизить ситуацию к более реальной

Ты путаешь понятия процесс и поток. Это напрягает. Если java-thread - то это один подход. Примитивы java.
Если это кастомный процесс операционки который ты запустил из java-runtime - то это скорее всего
будет другой подход и другой смысл. Более того он - не в нашей власти и даже остановить его
с гарантией мы не сможем.
...
Рейтинг: 0 / 0
27.04.2020, 19:49
    #39952075
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
Пардон, попутал процессы и потоки (у кого что болит), но за sleep всё равно надо отстреливать - join(таймаут) к любому потоку из контролируемого набора и проверять по выходу весь набор.
...
Рейтинг: 0 / 0
27.04.2020, 20:18
    #39952082
extra_dj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер в потоке
mayton,
ок, тогда еще раз. я запускаю поток, в котором выполняется процесс( действие) - в моем случае это запуск скрипта sql. мне надо чекать, считается он или нет. если скрипт отработал, через линуксовский шедулер приходит ответ, что скрипт завершен (реализация уже есть). вот в это время мне необходимо дергать метод completeTask и проверить - идет расчет или нет и отправлять в лог сообщение типа идет/не идет и время, которое прошло от начала.
в том примере, что я скинул - просто смоделировал такую ситуацию. надо проверить, появилась ли восьмеркаю а до этого отправлять лог, что идет цикл.
возможно я неправильно определил понятие процесс
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Таймер в потоке / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]