gewusst wie: überschreiben thread.start () - Methode in java?
Muss ich implementieren thread.start () - Methode in der java-code. Bitte lassen Sie mich wissen durch ein Beispiel zu überschreiben thread.start () - Methode und wie funktioniert es?
Warum, glauben Sie, werden Sie brauchen, um es zu überschreiben?
Bitte sagen Sie uns, warum Sie nicht umsetzen, Ihre Logik in run().
Ich habe zwei run () - Methoden.Ich brauche, um zu entscheiden, welche Methode run() sollte aufgerufen werden, aus dem spezifischen start () - Methode.
eine run () - Methode ist in der Basisklasse, und das zweite ist in der abgeleiteten Klasse.
In Ihrem Kommentar sagen Sie, Sie haben zwei laufen-Methoden? Eine in einer Unterklasse? Wird es nicht herausfinden, welche zu nennen, bei der Laufzeit? Könnte nützlich sein, um zu zeigen, das (Beispiel -) code...
Bitte sagen Sie uns, warum Sie nicht umsetzen, Ihre Logik in run().
Ich habe zwei run () - Methoden.Ich brauche, um zu entscheiden, welche Methode run() sollte aufgerufen werden, aus dem spezifischen start () - Methode.
eine run () - Methode ist in der Basisklasse, und das zweite ist in der abgeleiteten Klasse.
In Ihrem Kommentar sagen Sie, Sie haben zwei laufen-Methoden? Eine in einer Unterklasse? Wird es nicht herausfinden, welche zu nennen, bei der Laufzeit? Könnte nützlich sein, um zu zeigen, das (Beispiel -) code...
InformationsquelleAutor Anand | 2010-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht. Überschreiben laufen statt
InformationsquelleAutor Schildmeijer
Wie andere gesagt haben, überschreiben
Thread.start()
ist nicht der Weg, es zu tun. In der Regel würde ich Sie nicht überschreibenThread.run()
entweder, aber mit einemRunnable
.Wenn Sie haben zu entscheiden, welche Methode ausgeführt, nachdem der thread wurde erzeugt, Sie könnte so etwas tun:
Wenn, wie Sie sagen, Sie haben eine Oberklasse und eine Unterklasse, wo die
run()
Methode wird überschrieben, Sie können nur verlassen sich auf späte Bindung und die richtige Methode, wird automatisch aufgerufen:InformationsquelleAutor Henning
Können Sie überschreiben
start
als jede andere Methodeaber Sie müssen rufen Sie
super.start()
ein neues Thema erstellen, und habenrun()
aufgerufen, in diesem neuen thread. Die originalstart
hat einige Magie (native code), die man kaum imitieren kann.Wenn Sie anrufen
run()
direkt in Ihremstart()
(oder einem anderen Verfahren), es wird ausgeführt, in den tatsächlichen thread, wie einer normalen Methode, auch nicht in einem neuen thread. Es gibt keinen Grund, einen Thread, wenn Sie nicht möchten, ausführen von code in einem neuen thread.Müssen Sie Ihre Entscheidung Logik in der
run()
Methode, vielleicht mit einigen Variablen im Konstruktor (oder einer anderen Methode, die schließlich instart
), wenn dies wirklich erforderlich ist. Ich kann keine finden Grund für die Notwendigkeit dieser variable sollte es genug sein, um zu testen, mit dem Zustand, inrun()
wie schon an anderer Stelle.aber es wäre einfacher zu verstehen und zu pflegen, wenn du es so machst wie @Henning vorgeschlagen!
Es ist auch eine Objekt-orientierte Lösung...
Nein, es ist nicht
sleep()
ist statisch, aber nichtstart()
- zumindest nicht in den Versionen, die ich verwenden/verwendet haben (JDK 1.02 bis SE 8) haben einen Blick in die Dokumentation: Thread.start(). Vielleicht ist es statisch in einigen nicht-SE-version (wie bei android?), aber diese Frage ist nur markiert als plain Java... und fast 4 Jahre alt [:-OInformationsquelleAutor Carlos Heuberger
Sie überschreiben nicht die starten, überschreiben Sie die "run". Sie können einfach zu implementieren einen thread durch:
also,bitte lassen Sie mich wissen, wie das überschreiben der start () - Methode mit einem Beispiel.
Rufen Sie Ihre Logik in den run-Methode.
wie das, was ich sagte, in den Kommentar oben .start() ruft die Logik in Ihrer "run" - Methode, so dass Sie Ihren code innerhalb der run-Methode UND ich versichere Ihnen, es wird aufgerufen werden, wenn Sie anrufen .start().
wie ich kommentiert habe oben ich will, um sicherzustellen, dass die spezifischen run () - Methode die start () - Methode aufgerufen wird.In meinem code gibt es zwei run () - Methoden und ich möchte, um zu entscheiden, in der start () - Methode die run() aufgerufen werden würde.
InformationsquelleAutor Manny
Eigentlich kann man aufrufen von run() zum ausführen einer thread-anstelle von start() zur Ausführung eines thread. Aber es gibt einen kleinen Unterschied.
Angenommen, Sie erstellen zwei threads:
Fall 1 :, Wenn Sie anrufen", t1.run()" und "t2".run()" einer nach dem anderen werden Sie zu laufen beginnen t1 und t2 synchron (nacheinander).
Fall 2 Sie : Wenn Sie rufen "t1.start()" und "t2".start()" einer nach dem anderen Sie nennen Ihre run () - Methoden und beginnen zu laufen, t1 und t2 asynchron (parallel).
InformationsquelleAutor
Stimmen mit Schildmeijer, nicht überschreiben, start, override run() statt.
In der Tat, obwohl start überschrieben werden können (es ist nicht final), es ruft die native start0 Methode, die wiederum dazu führen, die VM zum Aufruf der run-Methode (tatsächlich aus dem Kontext einer nativen thread/Prozess). Die native start0 Methode hat einen privaten Zugang, so dass selbst wenn Sie überschrieb den start, ich kann nicht sehen, wie könnten Sie reproduzieren beeinflussen.
Den client-Aufruf von start() wird innerhalb eines thread (sagen wir, dem Haupt-thread), es ist nicht, bis die run-Methode hat das Ihre getan, was, die ein weiterer thread erzeugt werden.
Werfen Sie einen Blick auf die Sonne (ähem, Oracle) tutorial über threads auf http://download.oracle.com/javase/tutorial/essential/concurrency/index.html, insbesondere den Abschnitt über starten von threads.
in diesem code seine Abgabe einen Fehler, der start ist nicht gelöst. Bitte lassen Sie mich wissen, was ist das problem in diesem code.
InformationsquelleAutor Toby
Ich bin mir ziemlich sicher, dass Sie nicht brauchen, um ein überschreiben der start-Methode.
Übrigens: Take al look auf java.util.gleichzeitige.Callable
http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Callable.html
InformationsquelleAutor Christian Kuetbach
Ja die start () - Methode kann überschrieben werden.
Es sollte aber nicht außer Kraft gesetzt werden, wie es ist, ist die Implementierung in eine thread-Klasse hat die - code zum erstellen einer neuen ausführbaren thread und ist spezialisiert.
InformationsquelleAutor VdeX
Wenn wir unsere eigene Implementierung der start-Methode dann funktioniert es wie ein normaler Methodenaufruf und wird auf das aktuelle thread-stack nur. Der neue thread wird nicht erstellt werden.
InformationsquelleAutor user2450176