@Vergil1718

Ккак запускать поток только 1 раз?

Пишу проект на java с использованием spring, на главной странице запускаю скрипт, который написан на Python. Встает вопрос как сделать так чтобы запускать этот скрипт 1 раз, чтобы нельзя было повторного его запустить с другого компа?
пока наброски делаю класс-поток: (ThreadsClass.java)
package com.blrmyfc.ComputerVision;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ThreadsClass extends Thread {

    private Process process = null;

    public void starting(String command, String script){
        ProcessBuilder processBuilder = new ProcessBuilder(command, script);
        processBuilder.redirectErrorStream(true);

        try {
            process = processBuilder.start();

        } catch (IOException e) {
            e.printStackTrace();
        }

        InputStream stdout = process.getInputStream();
        InputStreamReader isrStdout = new InputStreamReader(stdout);
        BufferedReader brStdout = new BufferedReader(isrStdout);

        String line = null;
        while (true){
            try {
                if (!((line = brStdout.readLine()) != null)) break;
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println(line);
        }
        int exitVal = 0;
        try {
            exitVal = process.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("выход = "+exitVal);
    }

    public void exit(){
        process.destroyForcibly();
    }

    public void run(){
        String command = "python3";
        String script = "core/blr_recognizer/production.py";
        starting(command, script);
    }
}

Класс-контроллер (MethodsController.java)
private ThreadsClass threadsClass;

    public ThreadsClass getThreadsClass(){
        return threadsClass;
    }

    public void setThreadsClass(ThreadsClass threadsClass){
        this.threadsClass = threadsClass;
    }
    @PostMapping("/starting")
    public String starting() {
        ThreadsClass mainThread = new ThreadsClass();
        setThreadsClass(mainThread);
        System.out.println(getThreadsClass().getState());
        getThreadsClass().start();
        return "true";
    }
    @PostMapping("/interrupt")
    public String interruptScript(){
        getThreadsClass().exit();
        getThreadsClass().interrupt();
        return "true";
    }
}


612f5915843ee752974166.png

сейчаc я могу зайти с обычного режима и с инкогнито, и запустить его. Надо как-то синхронизировать потоки?
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Надо во внешней системме сделать какой-то флаг: это может быть, например, какой то лок-файл или запись в БД (в SQL или NOSQL)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы