Kann ich einen thread in einen thread in java?
In Java habe ich die Notwendigkeit der Implementierung einer Klasse, die Sie erweitert-Thread
in einer anderen ähnlichen Klasse. Ist das möglich?
Ein Beispiel, was ich versuche zu tun, ist die folgende (vereinfachte) Ausschnitt:
//The first layer is a Thread
public class Consumer extends Thread {
//Variables initialized correctly in the Creator
private BufferManager BProducer = null;
static class Mutex extends Object {}
static private Mutex sharedMutex = null;
public Consumer() {
//Initialization of the thread
sharedMutex = new Mutex();
BProducer = new BProducer(sharedMutex);
BProducer.start();
}
public void run() {
int data = BProducer.getData();
/////.... other operations
}
//////...... some code
//Also the second layer is a Thread
private class BufferManager extends Thread {
Mutex sharedMutex;
int data;
public BufferManager(Mutex sM) {
sharedMutex = sM;
}
public int getData(Mutex sM) {
int tempdata;
synchronized(sharedMutex) {
tempdata = data;
}
return tempdata;
}
public void run() {
synchronized(sharedMutex) {
data = getDataFromSource();
}
/////.... other operations on the data
}
}
}
Den zweiten Thread implementiert wird direkt in die Erste.
Außerdem würde ich gerne wissen, ob die Implementierung einer Mutex-wie das funktionieren wird.
Wenn nicht, gibt es keine bessere (standard -) Weg, es zu tun?
Vielen Dank im Voraus.
- Das ist nicht Inception.
- ..Wie kann man sicher wissen?
- Alle threads gestartet, die von anderen threads, das Sie keine Wahl haben. Threads sind für die Arbeit so unabhängig wie möglich.
- Außer für die Big-Bang, die erstellt der erste Thread. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Thread
wird nicht ausgeführt, 'innerhalb', sondern side-by-side.Also ja, Sie können den start eines weiteren
Thread
ausgeführt side-by-side mit Ihren anderen zweiThread
's. Als eine Angelegenheit von der Tat, jedeThread
anderen starten könnenThread
(so lange, wie das Betriebssystem es zulässt).new BProducer(sharedMutex)
?) Aber ich denke, dass IhrMutex
damit IhrProducer
undConsumer
richtig zu verriegeln.Ja, sollte diese Arbeit und die gemeinsame Mutex sollte es nicht sein job. Aus paranoia, ich würde sowohl den mutex Erklärungen
final
zu vermeiden, irgendwelche komischen "Flucht" Probleme. z.B.Einen Vorschlag: vielleicht ist das mein Stil, aber für einen code wie diesen habe ich selten verlängern
Thread
. Einfach umzusetzenRunnable
statt. IMO ist es ein bisschen weniger verwirrend (YMMV hier). Plus, wenn Sie starten, mithilfe der erweiterten concurrency utilities wieExecutor
beschäftigen Sie sich mitRunnables
, nicht Threads.Runnables
. Es wäre schwierig fürjava.util.concurrent
Klassen zu ermöglichenThread
pooling ohne die VerwendungRunnable
's.