Ausführen von zwei unabhängigen Tasks gleichzeitig mit Threads

8

Ich habe viele Tutorials zu Threads in Java studiert, aber ich kann meine Antwort nicht finden.

Meine Frage ist: Wie kann ich zwei unabhängige Threads gleichzeitig ausführen?

Mein Fall ist: Ich habe zwei Aufgaben;

  1. Speichern Sie einige Daten in der Datenbank
  2. Senden Sie eine Push-Benachrichtigung auf einem mobilen Gerät.

Da diese beiden Aufgaben unabhängig sind, möchte ich sie gleichzeitig ausführen.

Ich habe versucht, einen Thread-Pool mit zwei Threads zu verwenden, aber das Problem besteht darin, dass die Datenbank-Tasks schnell beendet werden, es jedoch einige Zeit dauert, eine Push-Benachrichtigung zu senden.

Wenn eine Task beendet wird, während die andere noch aussteht, wird eine Ausnahme ausgelöst.

Auch gibt es kein Problem in meinem Code, weil es gut läuft, ohne Threads zu verwenden.

Vielen Dank im Voraus

    
S1LENT WARRIOR 30.08.2012, 06:26
quelle

2 Antworten

25
___ qstntxt ___

Ich habe viele Tutorials zu Threads in Java studiert, aber ich kann meine Antwort nicht finden.

Meine Frage ist: Wie kann ich zwei unabhängige Threads gleichzeitig ausführen?

Mein Fall ist: Ich habe zwei Aufgaben;

  1. Speichern Sie einige Daten in der Datenbank
  2. Senden Sie eine Push-Benachrichtigung auf einem mobilen Gerät.

Da diese beiden Aufgaben unabhängig sind, möchte ich sie gleichzeitig ausführen.

Ich habe versucht, einen Thread-Pool mit zwei Threads zu verwenden, aber das Problem besteht darin, dass die Datenbank-Tasks schnell beendet werden, es jedoch einige Zeit dauert, eine Push-Benachrichtigung zu senden.

Wenn eine Task beendet wird, während die andere noch aussteht, wird eine Ausnahme ausgelöst.

Auch gibt es kein Problem in meinem Code, weil es gut läuft, ohne Threads zu verwenden.

Vielen Dank im Voraus

    
___ tag123multithreading ___ Multi-Threading ist die Fähigkeit eines Computers oder eines Programms, Arbeit gleichzeitig oder asynchron auszuführen, indem mehrere gleichzeitige Ausführungsströme (im Allgemeinen als Threads bezeichnet) verwendet werden. ___ tag123threadpool ___ Ressourcen in vorgegebenen Grenzen zusammenfassen und Aufgaben automatisch offenen Arbeitern zuweisen. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer48744476 ___

Ich hatte einen Anwendungsfall, um Dateien in mehreren Ordnern mit Multithreading zu durchsuchen. Als Eingabe hatte ich nur den Verzeichnispfad root und es kann eine beliebige Anzahl von untergeordneten Verzeichnissen geben. Annahme - Datei wird immer nur in einem der untergeordneten Verzeichnisse verfügbar sein.

%Vor%     
___ qstnhdr ___ Ausführen von zwei unabhängigen Tasks gleichzeitig mit Threads ___ antwort12191090 ___
%Vor%

Funktioniert gut ...

Ich bevorzuge die Verwendung eines ExecutorService persönlich.

UPDATE mit ExecutorService Beispiel

Also habe ich dieses wirklich schnelle Beispiel geschrieben ...

Im Grunde verwendet es ExecutorService , um ein paar einfache Aufgaben auszuführen. So wie es aussieht, laufen beide Aufgaben parallel (gleichzeitig)

%Vor%

Führe es aus ...

Ändern Sie nun ExecutorService service = Executors.newFixedThreadPool(2); in ExecutorService service = Executors.newFixedThreadPool(1); und führen Sie es erneut aus. Hast du den Unterschied gesehen?

Auf diese Weise können Sie die Anzahl der Threads steuern, die der Executor bei der Verarbeitung seiner Warteschlange verwenden kann.

Machen Sie weitere Aufgaben und fügen Sie sie zur Warteschlange hinzu und sehen Sie, was Sie bekommen.

    
___
MadProgrammer 30.08.2012, 06:30
quelle
0

Ich hatte einen Anwendungsfall, um Dateien in mehreren Ordnern mit Multithreading zu durchsuchen. Als Eingabe hatte ich nur den Verzeichnispfad root und es kann eine beliebige Anzahl von untergeordneten Verzeichnissen geben. Annahme - Datei wird immer nur in einem der untergeordneten Verzeichnisse verfügbar sein.

%Vor%     
Gopal Aggarwal 12.02.2018 10:40
quelle

Tags und Links