[JAVA] Überprüfen Sie das Flag nach Ablauf einer bestimmten Zeitspanne, seit der Thread ohne Verwendung des Timer-Threads ausgeführt wurde.

Was ich machen wollte

In einem Thread, der weiterläuft, sofern er nicht von außen abgebrochen wird, und wenn das Flag im eigenen Thread auch nach 1 Sekunde oder länger nach dem Start nicht gesetzt ist, möchte ich eine spezielle Operation ausführen. Before

Überprüfen Sie das Flag nach 1 Sekunde mit der Timer-Aufgabe

――Da es Timer-Threads gibt, sind die Threads verstreut und irgendwie durcheinander. ――Wenn die Anzahl der Flags und Felder zunimmt, müssen Sie über die exklusive Verarbeitung nacheinander nachdenken, was sehr schwierig ist.


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) {
                                //Wenn die gewünschten Daten auch nach 1 Sekunde nicht erhalten werden und der Thread nicht abgebrochen wird

                            }
                        }
                    });
                }
            }, 1000);

            while (!mIsStopThread){
                //Arbeiten Sie weiter, es sei denn, der Thread wird von außen abgebrochen
                //Wenn Sie die gewünschten Daten erhalten, setzen Sie das Flag mIsGot
            }
        }
    }
}

After Richten Sie keinen Timer-Thread ein, zeichnen Sie die Zeit auf, zu der der Thread gestartet wird, und beurteilen Sie anhand der Differenz zur aktuellen Zeit, ob 1 Sekunde vergangen ist.

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();
            //Zeichne die erste Laufzeit des Threads auf
            startTime = SystemClock.elapsedRealtime();

            while (!mIsStopThread){
                if (!mIsGot && (SystemClock.elapsedRealtime() - startTime) > 1000) {
                    //Wenn die gewünschten Daten auch nach 1 Sekunde nicht erhalten werden und der Thread nicht abgebrochen wird
                }
                //Arbeiten Sie weiter, es sei denn, der Thread wird von außen abgebrochen
                //Wenn Sie die gewünschten Daten erhalten, setzen Sie das Flag mIsGot
                if(!mIsGot){
                //Wenn Sie es noch nicht genommen haben, legen Sie es in den Schlaf
                   try {
                          Thread.sleep(100); 
                        } catch(InterruptedException e){
                          e.printStackTrace();
                        }  
                 }
            }
        }
    }
}

Recommended Posts

Überprüfen Sie das Flag nach Ablauf einer bestimmten Zeitspanne, seit der Thread ohne Verwendung des Timer-Threads ausgeführt wurde.
Überprüfen Sie den Status der Java-Anwendung, ohne das Überwachungstool zu verwenden