Я не могу запустить задачу, пока поток спит - PullRequest
2 голосов
/ 06 ноября 2019

В нашей системе мне было поручено создать страницу, которая будет отображать основные потоки нашей системы в реальном времени.

Чтобы воссоздать основной процесс, я планировал создать поток и дать ему спать в течениеминимум 5 секунд. Пока указанный поток находится в спящем режиме, я получу все активные потоки, проверим, существует ли созданный мною поток, и затем сохраню информацию о потоке в моей modelMap, которая будет передана в мой JSP для отображения.

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

Моя главная тема:

        SampleThread1 sampleThread1 = new SampleThread1();
        sampleThread1.setName("SAMPLE THREAD 1");
        sampleThread1.run();

        initializeMajorProcess ();

        sampleThread1.interrupt();

SampleThread1:

    class SampleThread1 extends Thread {
        public void run () {
            try {
                System.out.println("-------- thread is starting");              
                Thread.sleep(5000);
                System.out.println("-------- thread is done");              
            } catch (InterruptedException e) {
                System.out.println(this.getName() + "Interrupted");
            }
        }
    }

initializeMajorProcess:

    private String initializeMajorProcess () {
        Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
        Set<Thread> nonDaemonThreads = new HashSet<Thread>();

        for (Thread thread : threadSet) {
            if (thread.isDaemon() == false && !thread.getName().startsWith("MyScheduler")) {
                System.out.println(thread.getId());
                System.out.println(thread.getName());
                System.out.println(thread.isAlive());
                nonDaemonThreads.add(thread);
            }
        }

        return "frps/DeveloperDashboard";
    }

Я всего лишь младший разработчик с однимлетний опыт работы. Я впервые обращаюсь с потоками и впервые спрашиваю о StackOverflow, поэтому, пожалуйста, не обращайте на меня внимания: ((

Я также хотел бы спросить, как мне отображать информацию о потоках в реальном времени? Я должен использовать WebSocket или мне нужно использовать AJAX?

1 Ответ

1 голос
/ 06 ноября 2019

Thread.sleep(5000); спит основной поток в процессе выполнения, т. Е. Ваш основной класс, потому что вы не запустили поток, а просто вызвали метод run.

Следовательно, вместо sampleThread1.run(); вместо вызова *1005* следует вызвать sampleThread1.start();.

...