powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Таймер в потоке
9 сообщений из 9, страница 1 из 1
Таймер в потоке
    #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
Таймер в потоке
    #39952056
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
необходим еще один поток, который будет проверять, выполняется ли поток
Это сложный и философский вопрос.

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

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

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

Код: java
1.
completeTask();



?

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

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

Код: java
1.
wait10secondAndDie(…)



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

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

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

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


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