Pause ohne sleep und ohne zweiten Thread

G

Gast2

Gast
Hi,

ich brauche in meinem Programmablauf eine Pause (z.B. 2Sek.).
Aus technischen Gründen kann / will ich keinen zweiten Thread eröffnen,
also fällt Thread.sleep weg.

Als Alternative habe ich mir überlegt mit dem Timestamp zu arbeiten.
Sieht so aus:
Java:
        long now = System.nanoTime();        
		long end = now + 10000000;
		
		txv.setText("Anfang");
		
		while (System.nanoTime() < end ) {
			txv.setText(String.valueOf(now));
		}
		
		txv.setText("Ende");

Aber sobald ich das Programm starte, steht "Ende" auf dem Bildschirm.
Warum funktioniert das nicht?

Frank
 

schlingel

Gesperrter Benutzer
Eine Nanosekunde sind 0,000 000 001 Sekunden

0,000.000.001 * 10.000.000 = 0,01 Sekunden Verzögerung die du deinem Programm hier gibst. Das ist relativ wenig und könnte dazu führen, dass es so aussieht als gäbe es keine Verzögerung.

Aber busy waiting hat andere Nachteile. Wenn du den UI-Thread blockierst (ich nehme mal an du bist in einem, wenn nicht gibt's andere Probleme mit dem Setzen von UI-Komponenten außerhalb des UI-Threads), wird das System davon ausgehen, dass deine App hängt und den "Möchten Sie die App beenden"-Dialog anzeigen.

Was sind denn die technischen Gründe, dass die Lösung mit einem AsyncTask nicht in Frage kommen?
 
G

Gast2

Gast
Eine Nanosekunde sind 0,000 000 001 Sekunden
0,000.000.001 * 10.000.000 = 0,01 Sekunden

Ich hatte sooo viele Nullen angehangen, dass ich dachte es müßte reichen. ;)
mit 2 Sekunden ist es sichtbar. (und unterhalb eines Time Out)

Was sind denn die technischen Gründe, dass die Lösung mit einem AsyncTask nicht in Frage kommen?

Der Grund ist, dass der Hauptthread weitergeht und der dem sleep nachfolgende Befehl ausgeführt wird, bevor Thread.sleep zuende ist.
 
G

Gast2

Gast
Jetzt nach der Implementierung sehe ich, dass mein Problem im Ablauf gar nicht mit dem 2.Thread (für sleep) zu tun hat. Auch bei Verwendung des TimeStamp treten ungelöste Rätsel auf.
 

schlingel

Gesperrter Benutzer
Thread Synchronisierung darf niemals, wirklich niemals, über waiting, sei es busy oder per sleep, passieren. Es garantiert dir niemand, dass die Threads genau parallel ablaufen oder das Thread 1 immer vor Thread 2 läuft. Das einzige was dir garantiert wird ist, dass die Threads laufen. (meistens ;-))

Hier solltest du einmal die Architektur überdenken und die Synchronisierung per Events steuern und gegebenenfalls auf lock, Monitore oder Semaphoren zurückgreifen um tatsächlich sicherzustellen, dass die Threads nicht irgendwann das tun was sie wollen.
 

mjustin

Aktives Mitglied
Aus technischen Gründen kann / will ich keinen zweiten Thread eröffnen,
also fällt Thread.sleep weg.

Das 'also' ist mir unklar - Thread.sleep() kann nie einen zweiten Thread ansprechen oder gar einen starten. Es wirkt immer auf den aktuellen Thread.

Thread (Java 2 Platform SE v1.4.2)

sleep - "Causes the currently executing thread to sleep (cease execution) for the specified number of milliseconds plus the specified number of nanoseconds."
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Pause im Programmablauf ohne extra Thread Android & Cross-Platform Mobile Apps 2
B GameLoopThread Pause and Resume? Android & Cross-Platform Mobile Apps 7
Naxon89 Duplicate class kotlin - und dies ohne das es angewendet wird Android & Cross-Platform Mobile Apps 1
I Android ListView, Werte aktualisieren ohne die Liste komplett neu zu laden Android & Cross-Platform Mobile Apps 5
T Screenshot speichern ohne alte Datei überschreiben Android & Cross-Platform Mobile Apps 3
T Android ArrayList sortieren mit 2 Werten ohne thencomparing , Wie? Android & Cross-Platform Mobile Apps 10
Jackii Android Android Studio Error im Testlauf ohne zu programmieren Android & Cross-Platform Mobile Apps 9
L Android App ohne MainActivity Android & Cross-Platform Mobile Apps 3
J Android LogIn/Registrierung ohne Mail-Adresse Android & Cross-Platform Mobile Apps 1
B Android USB Debugging ohne kabel möglich? Android & Cross-Platform Mobile Apps 5
G Accelerometer ohne Activity Android & Cross-Platform Mobile Apps 8
M Fehler ohne Sinn? java.lang.RuntimeException: Unable to start activity ComponentInfo Android & Cross-Platform Mobile Apps 11
G Activity-Wechsel bitte ohne Notification Android & Cross-Platform Mobile Apps 6
C Activity ohne Aktion starten Android & Cross-Platform Mobile Apps 8
S Entwicklung von Smartphone programmen ohne selber eins zu besitzen Android & Cross-Platform Mobile Apps 17
StrikeTom Android tabs ohne xml Android & Cross-Platform Mobile Apps 6

Ähnliche Java Themen

Neue Themen


Oben