Ich versuche, ein Multi-Thread-Programm mit zwei Threads zu schreiben; der erste wird eine Direktzugriffsdatei aktualisieren, nachdem ein "neuer" Befehl angefordert wurde, und der zweite akzeptiert die Befehle "neu" oder "Ende" und sendet sie an den ersten Thread. Ich wollte eine Warteschlange benutzen, die von einem Semaphor gesteuert wird, was ich unten geschrieben habe. Ich weiß nur nicht, wie ich den anderen Thread assoziiere. Der eine Thread sollte Zeichenfolgen aus dem Benutzerbefehl erzeugen und in die Warteschlange einfügen, und der andere Thread ruft die Zeichenfolgen aus der Warteschlange ab, um sie in die Datei mit direktem Zugriff zu schreiben. Kann jemand helfen, den Thread zu starten?Ich habe Probleme mit dem Erstellen von zweiten Thread für ein Multi-Thread-Programm
package multi_threaded_producer_consumer;
import java.util.concurrent.Semaphore;
public class MTQueue {
private Semaphore sem = new Semaphore(1);
private java.util.Queue<String> statQ;
public static void main(String[] args) {
}
public MTQueue(){
statQ = new java.util.LinkedList<String>();
}
public void MTPut(String qe) {
try {
sem.acquire();
statQ.offer(qe);
} catch(InterruptedException ex) {
} finally {
sem.release();
}
}
public String MTGet() {
String retVal = new String();
try {
sem.acquire();
retVal = statQ.poll();
} catch(InterruptedException ex) {
} finally {
sem.release();
}
return retVal;
}
}
Stehen Sie buchstäblich nur zu fragen, wie ein Thread in Java zu schreiben? Es ist ein neuer Thread (myRunnable) .start(). Wobei myRunnable eine Klasse mit einer run-Funktion ist, die das tut, was der Thread tun soll. Wenn Sie etwas anderes fragen, versuchen Sie, klarer zu sein. –
@GabeSechan Setze ich es in eine separate Klasse oder füge es in das ein, was ich bereits geschrieben habe? Dies sind wahrscheinlich dumme Fragen, aber ich verstehe wirklich nicht die Gründe für die Verwendung von Multi-Threading überhaupt – Chief
Schlucken 'InterruptedException' (oder irgendeine andere Ausnahme) ist eine _sehr schlechte Angewohnheit. Wenn Sie nicht erwarten, dass Ihr Programm unterbrochen wird, und es Ihnen egal ist, was passiert, wenn es unterbrochen wird, dann sollten Sie am wenigsten 'RuntimeException (ex) werfen;' –