run()-Code zweier Threads strikt abwechselnd ausführen

Status
Nicht offen für weitere Antworten.

Murmeltier

Mitglied
Hi,

ist es möglich, eine Anwendung, in der 2Threads vorkommen so zu programmieren, dass der Sheduler immer
genau nur einmal den Code inerhalb der Run Anweisung ausführt, und dann zum anderen Thread wecheslt.
Beide Threads haben eine endlos While Schleife.
Gibt es dazu ein Stichwort?

Kurzes Google ergab nicht viel weil Threads nunmal immer abwechselnd ausgeführt werden, ich bruache aber den Fall, dass eben zwei Threads im Wechsel ausgeführt werden, wobei der Code jedes Threads aber nur geneu !einmal!durchlaufen wird und dann der Wechsel stattfindet.

Danke!
 

Murmeltier

Mitglied
Klar, Threads werden schon "gleichzeitig" ausgeführt, aber nicht wirklich.
Auf einem Rechner mit ein CPU kann nur ein Prozess gleichzeitig laufen.
Das siehst du ja wenn du dir diverse Besipiele anschaust, wenn z.B. Threads einen gemeinsamen Zähler hoch oder runterzählen. Der Sheduler, also der Teil des Betriebssystems, der sich darum kümmert, nach welcher Logik einzelene Prozesse Rechenzeit bekommen, lässt die Threads auch nur Nacheinander an die CPU und nie gleichzeitig.
Aber eben weil es Threads gibt, kann ein Programm quasi mehere Sachen gleichzeitig machen, weil der Sheduler jeden Thrad quasi einzeln betrachtet, d.h. wenn du ein Progarmm hast in dem du 2 Thrads erzeugst würde volgendes passieren:

Hauptprogramm wird geladen und bekommt 10ms Rechenzeit <<hier werden z.B. Thread 1 und 2 erzeugt.
Thread1 bekommt dann auch 10ms
Thread2 bekommt 10 ms
Excel bekommt 10 ms
Word bekommt 10ms....
[....]
dann wieder Hauptprogramm
Thread1
Thread2.

Du vestehst was ich meine ; ) ?!

So und jetzt konkret zu meinem Prblem.
Ich habe einen Kicker (kürzlich schon mal anastzweise geschildert) als Java-Applet und 2 Threads.
Ein Thread ruf periodisch repaint, die Methode zur Ballberechneung (also nächste Position), und Kollisionabfrage auf.
Der andere Thread ist für die Animation für Schuss zuständig. Der andere für die Animation d. Schusses, also das Rotieren von Spieler um eine Stange.

Problem: D. Thread (unten) bekommt sagen wir 40ms Rechenzeit, in der mein Rechner es schafft das Bild um 4 Bilder (was 40° entspricht)
weiterzuschalten, dann ensteht das Prblem, dass Kollisionberechnung nicht erfolgt, sondern erst wenn der Thread die CPU wieder freigibt. Logsicher wäre es, wenn immer, nachdem ein Bild weitergeschlaten wurde, Kollision und nächste Position aufgerufen würde.
Ich könnte noch ein weiteres Problem schildern aber lasse es erstmal dabei, weils eh schon genug Text ist ; ).
Falls du dir mal ein Bild machen möchtest

http://www.abileave2002.de/entwurf/idex.html

Code:
public  void run()
  {

      while (iAktBild < 35)
      {

      //ein Bild weiterschalten
      iAktBild++;
      try {Thread.sleep(iSchussRefresh);}
      catch (InterruptedException e) {}
     }

      //Anim ist durchgelaufen, wieder 0 bild setzten

      iAktBild = 0;
      bSchussThread = true; // es kann wieder die Schusstaste betätigt werden

Gruß.......
 
B

Beni

Gast
Lustiges Feature: wenn dein Applet in meinem Mozilla läuft, funktioniert die Tastatur nicht mehr...

Aber abgesehen davon: wenn die zwei Threads sowieso immer abwechselnd am Zug sind, kannst du wirklich auch nur einen verwenden:

Code:
public void run(){
  // Kollisionsabfrage, etc...
  calculateCollisionAndOtherStrangeThings();

  // repaint
  component.repaint();
}

Es sei denn, du hast noch was anderes vor.

mfg Beni
 

Murmeltier

Mitglied
Ja, ähm ich hab im Moment im Thread requestFocus(), deswegen klaut er dir wahrschienlich immer den Fokus. Sorry; )Klar im Prinzip hast ja Recht, ABER die Animation (Rotieruen um Stange) muss mit eine Sleep von ca 15ms laufen, damit sie hablwegs ok aussieht. Die Ballberechnung sollte aber nur alle 25ms laufen, weil die Schrittweite (in Pixeln) quasi festgelegt ist (nimm einfach an bei 1Pixel und Sleep von 15 wäre er immer noch zu schnell),
und der Ball sonst einfach zu sehr abgeht.

Beni hat gesagt.:
Lustiges Feature: wenn dein Applet in meinem Mozilla läuft, funktioniert die Tastatur nicht mehr...
Aber abgesehen davon: wenn die zwei Threads sowieso immer abwechselnd am Zug sind, kannst du wirklich auch nur einen verwenden:

Abwechselnd ja, aber die run() Methode eines Threads KANN dabei mehrmals durchlaufen werden, bevor der Wechesel drankommt.

Junge, ist das kompliziert... : )
:roll:
 

Murmeltier

Mitglied
Ok ich denke mir ist gerade ein Besipiel eingefallen, da sieht man sehr gut wo das Problem ist!

Thread1 ruft auf: (Sleep 25ms):
1. nächste Position (setzt x, und y von Ball neu)
2. Kollision (prüft ob neue Position eine Kollsiion verursacht, wenn ja wird der Winkel des Balls entsprechen geändert)
3. reapint
4. Sleep

Thread2 ruft auf (Sleep 15ms):
1. Bild weiterschalten (aniniert also eine Spielerreihe)

Problem von Oben:
Code:
Spieler 
     Ball
----  
||||
||||O
----

Angenommen, der Ball landet sagen wir mal ein Pixel vor den Füssen des Spielers (er guckt nach rechts; Thread1 wurde soeben durchlaufen), und Schuss wird betätigt, so kann es sein, dass Thread2 in seiner Zeit (>Sheduler) es schafft den Spieler in die 40°Position zu bringen. Währden dieser Zeit findet aber keine Kollisionabfrage statt
>> Resulatat: Der Spieler hat sich zwar über den Ball bewegt, ihn aber nicht merklich verändert.

Schlimmer noch, es kann sogar sein, dass er beim über-den-Ball-Bewegen just in dem Moment unterbrochen wird (von Thread1), indem der linke Teil seines Blockes(Fußes) über dem Ball schwebt und die Kollisionsabfrage führt die Kollsion in die falsche Richtung(nämlich nach links) aus.

*schnief*
:bahnhof:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Unsicher, ob das Code richtig ist Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
schemil053 Methoden Code-Verbesserung Allgemeine Java-Themen 2
D Webarchive (war): Code verschleiern Allgemeine Java-Themen 7
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
OnDemand Releaseversion Tag in Code Allgemeine Java-Themen 5
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
F Code auslagern Allgemeine Java-Themen 5
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
A code wird nicht ausgeführt Allgemeine Java-Themen 3
B Bitte um Code Erklärung Allgemeine Java-Themen 5
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
OnDemand Clean Code oder Allgemeine Java-Themen 5
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
H Precompilierten code ansehen Allgemeine Java-Themen 3
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
Drachenbauer Wie kann ich die menge an code reduzieren? Allgemeine Java-Themen 28
Thallius Warum ist dieser Code OS abhängig? Allgemeine Java-Themen 10
S Code Erklärung Allgemeine Java-Themen 21
B Pausem im Code Allgemeine Java-Themen 2
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
F Code in Klassen bringen Allgemeine Java-Themen 4
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
F Klassen Spaghetti Code Vermeidung Allgemeine Java-Themen 16
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6
I Python Code in Java Code Allgemeine Java-Themen 9
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
N Wie öffne ich einen runtergeladadenen Code in IntelliJ Allgemeine Java-Themen 3
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
O Standard library nativer C code Allgemeine Java-Themen 1
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen &#8203; Allgemeine Java-Themen 3
N Morse Code decoder Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
S Eclipse exit code 805306369 Allgemeine Java-Themen 1
Pataraca Vererbung Code einbinden Allgemeine Java-Themen 3
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
S Code 'innerhalb' des synchronen Bereichs einer BlockingQueue ausfuehren..? Allgemeine Java-Themen 7
F Verständlichkeitsproblem bei Java Code?! Allgemeine Java-Themen 2
G Eclipse Eclipse: Unreachable code Allgemeine Java-Themen 16
P Java Android Code in IOS compilieren? Allgemeine Java-Themen 9
C Code vereinfachen Allgemeine Java-Themen 2
T Hilfe bei Code Allgemeine Java-Themen 3
R Java-Code für folgene Aufgabe? Allgemeine Java-Themen 8
Prafy Best Practice Code Refaktorisierung Allgemeine Java-Themen 7
WetWer Was bedeutet/macht ein Exit-Code Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
perlenfischer1984 HTML Code decodieren Allgemeine Java-Themen 2
C ASCII-Code in Java Allgemeine Java-Themen 1
J Java-Code in DLL packen Allgemeine Java-Themen 5
J LWJGL 3 Error Code 1282 Allgemeine Java-Themen 4
0 Code startet nicht (Keine Warnung/Fehlermeldung) Allgemeine Java-Themen 4
A Frage zu meinem Code Allgemeine Java-Themen 2
B Code generierung Velocity Templates Telosys Allgemeine Java-Themen 1
E Fehlermeldung vor dem Programm code Allgemeine Java-Themen 1
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
Fischkralle Ausführen von fremden Code Allgemeine Java-Themen 14
wolfgang63 Code snipped Software Allgemeine Java-Themen 1
L Eclipse Editieren des Code templates für Override methods Allgemeine Java-Themen 2
J Java code "plugin" fähig machen Allgemeine Java-Themen 4
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
Thallius Wie verstecke ich meinen private Key am besten im Code? Allgemeine Java-Themen 10
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
N HTTP response code: 403 Allgemeine Java-Themen 3
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
D Java Compiler code referencen Allgemeine Java-Themen 0
B Fehler im Java-Code Allgemeine Java-Themen 4
A PHP-Code zu Java-Code Allgemeine Java-Themen 5
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
X Was macht folgender Code!? Allgemeine Java-Themen 6
K Code zu einem Projekt entschluesseln Allgemeine Java-Themen 15
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
Fab1 Best Practice Vorgehensweise bestehenden Code/Programm verschönern Allgemeine Java-Themen 4
M Code optimieren Allgemeine Java-Themen 7
A jEditorPane Html Datei öffnen (code) Allgemeine Java-Themen 3
S EAN-Code Tabelle für CD's Allgemeine Java-Themen 2
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
J Erzeugung von Java-Code Allgemeine Java-Themen 2
A Source code analyze Allgemeine Java-Themen 8
N VB Code in Java verwenden Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben