[JAVA] Vérifiez l'indicateur après un certain laps de temps depuis que le thread a commencé à s'exécuter sans utiliser le thread Timer.

Ce que je voulais faire

Dans un thread qui continue de fonctionner à moins d'être annulé de l'extérieur, si l'indicateur dans le propre thread n'est pas défini même après 1 seconde ou plus à partir du début de l'exécution, je souhaite effectuer une opération spéciale. Before

Allez vérifier le drapeau après 1 seconde avec la tâche du minuteur

―― Comme il y a des threads de minuterie, les threads sont dispersés et en quelque sorte foirés. ――Lorsque le nombre de drapeaux et de champs augmente, il faut penser au traitement exclusif un par un, ce qui est très difficile.


public class AClass {
    private AThread aThread=new AThread();
    private volatile Handler mHandler;
    public void start(){
        aThread.start();
    }
    public void stop(){
        aThread.mIsStopThread=true;
    }
    private class AThread extends Thread{
        public volatile boolean mIsStopThread = false;
        volatile private boolean mIsGot=false;

        @Override
        public void run() {
           

            Timer mTimer = new Timer();
            mTimer.schedule(new TimerTask() {
                @Override
                public void run() {
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            if ( !mIsGot&&!mIsStopThread) {
                                //Si les données souhaitées ne sont pas obtenues même après 1 seconde et que le thread n'est pas annulé

                            }
                        }
                    });
                }
            }, 1000);

            while (!mIsStopThread){
                //Continuer à travailler sauf si le fil est annulé de l'extérieur
                //Lorsque vous obtenez les données souhaitées, définissez l'indicateur mIsGot
            }
        }
    }
}

After Ne configurez pas de thread de minuterie, enregistrez l'heure à laquelle le thread commence à s'exécuter et évaluez si 1 seconde s'est écoulée en regardant la différence par rapport à l'heure actuelle.

public class AClass {
    private AThread aThread=new AThread();
    private volatile Handler mHandler;
    public void start(){
        aThread.start();
    }
    public void stop(){
        aThread.mIsStopThread=true;
    }
    private class AThread extends Thread{
        public volatile boolean mIsStopThread = false;
        volatile private boolean mIsGot=false;
        private long startTime;

        @Override
        public void run() {
            super.run();
            //Enregistrer la première exécution de Thread
            startTime = SystemClock.elapsedRealtime();

            while (!mIsStopThread){
                if (!mIsGot && (SystemClock.elapsedRealtime() - startTime) > 1000) {
                    //Si les données souhaitées ne sont pas obtenues même après 1 seconde et que le thread n'est pas annulé
                }
                //Continuer à travailler sauf si le fil est annulé de l'extérieur
                //Lorsque vous obtenez les données souhaitées, définissez l'indicateur mIsGot
                if(!mIsGot){
                //Si vous ne l'avez pas encore pris, mettez-le en sommeil
                   try {
                          Thread.sleep(100); 
                        } catch(InterruptedException e){
                          e.printStackTrace();
                        }  
                 }
            }
        }
    }
}

Recommended Posts

Vérifiez l'indicateur après un certain laps de temps depuis que le thread a commencé à s'exécuter sans utiliser le thread Timer.
Vérifiez l'état des applications Java sans utiliser d'outils de surveillance