Abtasten mit einem Thread

Status
Nicht offen für weitere Antworten.

Generic1

Top Contributor
Hallo,

ich habe jetzt einen Thread der mit dem größten gemeinsames Vielfachen von ein Paar werten ausgeführt wird, z.B. ist der ggt 2000ms wenn meine Zeiten für die Threads z.B.: 2000ms, 4000ms und 8000ms sind,

nun wird sendMessages ausgeführt und wenn z.B. sendMessages das erste mal ausgeführt wird dann ist 2000ms = 2000ms und es betrifft message1, wenn sendMessage das 2. mal ausgeführt wird, sind 4000ms vergangen und es ist message2 betroffen usw. nach message3 wird wieder von vorne angefangen,

Jetzt meine Frage: wie kann ich das am Besten realisieren, Zeit messen ist ja so eine Sache die nicht so genau ist, und ich müsste diese ja immer wieder auf 0ms setzen,

Hat da jemand eine Idee?



Code:
timerTask.scheduleAtFixedRate(this, 0, gcd);  // gcd ist z.B. 2000ms, wie oben erklärt
        
@Override
public void run() {
      serverMessageArray.sendMessages(/* so hab ichs mal zum testen gemacht: Math.abs(new Random().nextInt()%4)*/);
      }

public void sendMessages(int messageIndex) {
        Message message = messages[messageIndex];   // in "messages" sind die message mit 2000, 4000 und 8000 drinnen
        }
 

Marco13

Top Contributor
Das klingt ein bißchen verworren und kompliziert.... aber ... was spricht dagegen, einfach bei jedem Aufruf von sendMessages den messageIndex um 1 zu erhöhen (und eben bei jedem Zugriff oder regelmäßig
messageIndex %= numberOfMessages;
auszuführen)?
 

Generic1

Top Contributor
Marco13 hat gesagt.:
Das klingt ein bißchen verworren und kompliziert.... aber ... was spricht dagegen, einfach bei jedem Aufruf von sendMessages den messageIndex um 1 zu erhöhen (und eben bei jedem Zugriff oder regelmäßig
messageIndex %= numberOfMessages;
auszuführen)?


Ja so hab ichs jetzt ungefähr gelöst, Meine send- Methode schaut jetzt so aus, weiß nicht, ob man da noch was verbessern kann:

Code:
public void sendMessages(int threadCycleTime) {
        for(int i = 0; i < messages.length; i++) {
            if (messages[i].getCycleTime() == threadCycleTime * cycleCounter) {
                sendCounter++;
                Message message = messages[i];
                System.out.println(message.getServerInterface() + ", " + message.getProtocol()[0] + ", " + message.getCycleTime());
                break;
                }
            }
        cycleCounter += 1;
        if (sendCounter == messages.length) {
            cycleCounter = 1;
            sendCounter = 0;
            }
        }
 

FArt

Top Contributor
Das klingt nach einer Optimierung für das Problem: spare Threads bei einem Scheduler, der Aktionen in bestimmten Abständen auszuführen hat wobei ein Thread alle Aktionen übernehmen soll, die im Abstand t oder Vielfachen von t auszuführen sind.

Wenn das so ist: das ist eine unnötige und unpraktische Optimierung. Nimm dann einfach den ScheduledExecutorService aus dem java.util.concurrent Package und verpasse diesem einen Threadpool...
 

Generic1

Top Contributor
FArt hat gesagt.:
Das klingt nach einer Optimierung für das Problem: spare Threads bei einem Scheduler, der Aktionen in bestimmten Abständen auszuführen hat wobei ein Thread alle Aktionen übernehmen soll, die im Abstand t oder Vielfachen von t auszuführen sind.

Wenn das so ist: das ist eine unnötige und unpraktische Optimierung. Nimm dann einfach den ScheduledExecutorService aus dem java.util.concurrent Package und verpasse diesem einen Threadpool...

Das kann man so zusammenfassen, ich find meine Lösung durchaus praktisch, ich brauche mich nur um den einen Threas kümmern, vor allem, da ich nicht weiß wieviele "Messages" es gibt, es kann nur eine sein, es können aber auch 20 sein und deshalb habe ich diese Lösung gewählt, da sie einfach nachvollziehbar und einfach zu durchschauen ist,

Das einzige was mir ein bisschen Sorgen macht ist, ob es nicht schneller/resourcenschonender wäre, mehrere Thread zu verwenden,
 

FArt

Top Contributor
Warum ist das nicht so dolle?

1. (relativ) Kompiliziert.
2. Wenn eine Aktion relativ lange für die Ausführung benötigt, "verhungert" die nächste. Nachfolgende Läufe werden auch verschoben

Besser:

Mache ein sauberes Design. Code der einfach aussieht ist guter Code, leicht zu warten, leicht zu erweitern, birgt weniger Fehlerquellen und ist somit leichter auf Qualität zu sichern.
Um Optimierung kümmert man sich bei Bedarf.

Überdenke noch mal meinen Vorschlag mit dem SchedulerExecutorService... der bietet dir für deine Aufgabe noch mehr Voreile...
 

Generic1

Top Contributor
ich werd beide Lösungen mal ausprogrammieren und mir dann das Ganze mal auschauen, testen und vergleichen, mal schauen was dabei rauskommt,
Bei diesem Programmabschnitt zahlt sich das aus, es geht schließlich und die Kommunikation, und das ist der Hauptbestandteil meines Programms, alles weitere setzt auf diesen Daten auf und daher ist mir die Communication so wichtig,
herzlichen Dank für die Vorschäge,
 

Generic1

Top Contributor
Hab mir mal ein Programm zusammengebastelt,
ist das mit dem Scheduler ungefähr so gemeint, oder hab ich das falsch verstanden,

Code:
package scheduledexecutorservice;

import static java.util.concurrent.TimeUnit.*;
import java.util.concurrent.*;
 
public class MyScheduledExecutorService
{       
    private final ScheduledExecutorService scheduler;
    private int delay;
    private int millisec;
    private String text;
    
    public MyScheduledExecutorService(int corePoolSize, int delay,int millisec, String text) {
        scheduler = Executors.newScheduledThreadPool(corePoolSize);
        this.delay = delay;
        this.millisec = millisec;
        this.text = text;
        }
 
    // start the thread
    public void beepForAnHour() {
        final Runnable beeper = new Runnable() { 
            @Override
            public void run() {
                System.out.println(text);
                }
            };
        final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper, delay, millisec, MILLISECONDS); 
        }
 
    // start the programm 
    public static void main(String args[]) {
        MyScheduledExecutorService mses1 = new MyScheduledExecutorService(3, 1000, 3000, "Test1");
        MyScheduledExecutorService mses2 = new MyScheduledExecutorService(3, 1000, 3000, "Test2");
        //..
        mses1.beepForAnHour();
        mses2.beepForAnHour();
        }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
P Feststellen, Welche Classes ich aus einem JAR nutze? Allgemeine Java-Themen 6
Jose05 mit 2 - 3 Personen an einem Projekt coden Allgemeine Java-Themen 2
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
alinakeineAhnungv Hilfe bei einem Straßenbahn-Projekt von mir Allgemeine Java-Themen 18
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
Zrebna DeleteNode-Funktionalität in einem AVL-Tree Allgemeine Java-Themen 5
pkm Warnungen in einem Drools-Projekt unterdrücken? Allgemeine Java-Themen 1
D Arbeiten mit einem Bitarray Allgemeine Java-Themen 13
D Union in einem Struct in JNA Allgemeine Java-Themen 5
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
R Zoom In einem grid Allgemeine Java-Themen 0
M java.io.EOFException bei einem DataoutputStream ?! Allgemeine Java-Themen 2
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Fahrtsimulation von einem Zug Allgemeine Java-Themen 0
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
G JTextField Inhalt in einem Long einfügen Allgemeine Java-Themen 2
M Bei String.format ein Komma statt einem Punkt ausgeben lassen Allgemeine Java-Themen 1
K Bild in einem anderen Bild suchen Allgemeine Java-Themen 12
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
B Maven Zugriff auf files aus einem kompilierten jar Allgemeine Java-Themen 15
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
R Farbe zu einem Eckpunkt generieren Allgemeine Java-Themen 0
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
K Classpath Alle Classen aus einem Package lesen Allgemeine Java-Themen 7
K Auf einer Website nach einem String suchen Allgemeine Java-Themen 5
P Zwei Applikationen mit einem Job Allgemeine Java-Themen 0
Sin137 OOP Auf JPanel zugreifen, das einem JTabbePane hinzugefügt worden ist Allgemeine Java-Themen 10
E Die if-Anweisung in einer Java Bean bzw. in einem Servlet? Allgemeine Java-Themen 8
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
M Ein Programm das nur von einem bestimmten Programm geöffnet werden kann Allgemeine Java-Themen 7
H Klammerberechnungen bei einem Taschenrechner Allgemeine Java-Themen 2
S Kann man mit einem GeneralPath.curveTo ein GeneralPath.quadTo ersetzen..? Allgemeine Java-Themen 2
Seikuassi Alle Escape-Sequenzen in einem String ersetzen Allgemeine Java-Themen 4
S Rekursive Suche in einem Netz Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
M Zeilen zu einem DefaultTableModel hinzufügen Allgemeine Java-Themen 1
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
Thallius PDF von einem BufferedImage erstellen Allgemeine Java-Themen 1
M Abonnentenzahl, Aufrufe, etc. von einem YouTube-Kanal anzeigen Allgemeine Java-Themen 7
B Fehler bei einem Programm Allgemeine Java-Themen 10
E am häufigsten vorkommenden Farben aus einem Bild Allgemeine Java-Themen 5
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
F Punkte in einem Bild finden Allgemeine Java-Themen 10
M Eclipse Eine xhtml aus einem JSF Projekt starten Allgemeine Java-Themen 2
M String an einem abschnitt ändern Allgemeine Java-Themen 14
I Zu zweit an einem Projekt? Allgemeine Java-Themen 1
S Methoden Stunden seit einem bestimmten Zeitpunkt Allgemeine Java-Themen 3
D Problem mit Login in einem Dynamischen Webprojekt Allgemeine Java-Themen 1
D Grafisches Frontend zu einem Java Prozess erstellen Allgemeine Java-Themen 0
S Panel zur Dateiendarstellung wie in einem Explorer Allgemeine Java-Themen 12
K Code zu einem Projekt entschluesseln Allgemeine Java-Themen 15
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
M Lichteffekte in einem Java-Spiel Allgemeine Java-Themen 4
A Auswahl eines JEditorPane das Sich in einem JScrollPanel Befindet Allgemeine Java-Themen 2
S Android: Verlinkung in einem TextView Allgemeine Java-Themen 3
Minonos Einem Programm Zugriff auf bestimmte Ordner geben Allgemeine Java-Themen 5
F Funktion nur in einem Zeitraum Allgemeine Java-Themen 5
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
J Datentypen Verständnisprobleme bei einem Quelltext Allgemeine Java-Themen 32
I Sound abspielen aus einem Sample-Array Allgemeine Java-Themen 2
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
D IP / Domain in einem String erkennen Allgemeine Java-Themen 2
SexyPenny90 Spalte einer Exceldatei in einem String speichern Allgemeine Java-Themen 11
K Quadrat in einem Bild erkennen Allgemeine Java-Themen 33

Ähnliche Java Themen


Oben