2016-06-20 5 views
-1

Sagen wir, ich habe eine Klasse namens "Car", und innerhalb dieser Klasse gibt es einen Timer ständig läuft. Wenn ich car=null; setze wird es den Timer und alle anderen Objekte entfernen?java - Einstellung einer Klasse gleich null wird alle Timer innerhalb dieser Klasse los

Ich frage dies, weil ich einmal eine Klasse hatte, die einen Timer hatte, der Objekte erstellen würde, und wenn die Objekte den Bildschirm verlassen würden (sie bewegten sich), würden sie gelöscht werden. Wie auch immer, es schien, dass ich sie nicht richtig entfernte, was dazu führte, dass es eine Menge von Objekten für den Computer gab, die Verzögerungen und Verzögerungen verursachten. Aber selbst nachdem ich die Containerklasse, die den Timer hatte und die anderen Objekte darin auf Null gesetzt hatte, gesetzt hatte, war die Verzögerung immer noch da und würde immer schlechter werden, bis sie eingefroren erschien.

Antwort

2

Nein, wenn der Timer vorhanden ist und läuft, wird er weiter ausgeführt. Wenn Sie die Variable des umschließenden Objekts auf null setzen, wird dies nicht geändert. Beachten Sie, dass es einfach genug ist, dies zu testen, da die meisten Debugger Ihnen zeigen, welche Threads ausgeführt werden und wie der Status von Variablen ist - also führen Sie dies durch einen Debugger und sehen Sie selbst. Entweder ein java.util.Timer oder ein javax.swing.Timer (Sie sagen uns nicht welche) wird weiterhin ausgeführt werden, und wird seinen eigenen Thread dazu verwenden

Ihr Hauptproblem ist, dass Sie reinigen müssen Haus, loswerden von aktiven Objekten, die Sie nicht mehr brauchen, und Ihr derzeitiger Plan wird wahrscheinlich nicht funktionieren. Für bessere Hilfe, Hilfe bei der Beseitigung Ihrer unerwünschten Objekte, werden Sie wahrscheinlich eine viel umfassendere Frage stellen müssen, eine mit einer minimal example program, die Ihr Problem für uns vollständig zeigt.

Beachten Sie auch, dass Sie Zustand:

.... andere Objekte behandelt innerhalb es auf null ...

Bitte haben Sie Verständnis, dass man nie ein Objekt zu „null gesetzt "Und das hat tatsächlich keine Bedeutung. Ja, Sie können eine Referenzvariable auf null setzen, aber das ist etwas völlig anderes, und dieser Unterschied ist wichtig. Es sind Referenzen, die hier eine Rolle spielen.

-1

Wenn ich das richtig verstehe

Sie haben eine Klasse namens Auto so

public class Car {} 

Innen Auto Sie eine Funktion Timer haben, Gewinde basiert?

Wenn Sie Auto anrufen, aber dann frei, indem Sie es null erklären, mit meinem Verständnis, dass Klasse null sein sollte. Es sei denn, Sie verwenden eine andere Klasse namens Timer und es hat einen eigenen Thread, der durch eine statische Funktion verbunden ist, die Sie aufrufen, dann sollte es weitermachen, da die Car-Klasse nur getTime() verwendet; oder was auch immer du benutzt, um die Zeit zu bekommen. Grundsätzlich gesagt, es ist unabhängig voneinander.

Das war eine schnelle Antwort so hoffentlich Ihre Frage

+0

Zuweisen von Null zu einer ** Variable ** (Sie können nicht deklarieren eine Klasse oder ein Objekt Null, also bitte nicht sag das) wird die Dinge nicht frei machen. –

+0

Ich behaupte, dass wenn Sie eine Aktivität ausführen, indem Sie den Speicher für ein Objekt zuweisen und dann versuchen, es durch einen Aufruf von null zu verwerfen, wird es nicht sofort entfernt. Niemals gesagt, dass der Speicher sofort geschrubbt/frei gemacht wird, denn das ist es, was er bekommen könnte =] –

+0

Wiederum, "verwerfe es durch den Aufruf von null" hat keine Bedeutung für ein Objekt. –

0

Die Antwort ist nein beantwortet, unter der Annahme, dass „Timer“ Sie erwähnen java.util.Timer ist.

Sobald Sie einen Timer erstellt haben, wird ein Thread gestartet und wird weiter ausgeführt, bis abgebrochen oder JVM gestoppt wird. Sie müssen also explizit timer.cancel() aufrufen, um den Timer zu stoppen, wenn Ihr "Car" nicht mehr verwendet wird.

0

Kurze Antwort ist nein.

Lange Antwort: Zuweisen der car = null; ziemlich entfernen Sie den Haken zwischen dem Auto Objekt und Speicher Frieden, der das Objekt hält. Wenn kein anderes Objekt eine Verbindung zu diesem Speicherfrieden hat, kann das nächste Mal, wenn GC ausgeführt wird, es aufräumen.

Ich habe eine Klasse namens "Car", und innerhalb dieser Klasse gibt es einen Timer ständig läuft.

Also der Timer ist eine statische Variable oder eine Methode gehören zur Klasse.

Wenn Sie den Timer mit dieser Klasse entfernen möchten, müssen Sie explizit das stoppen, wie den Thread stoppen, der Ihren Timer ausführt. Oder wenn Sie eine kündbare Aufgabe wie FutureTask auf Java ausführen, können Sie Timer.cancel (true) ausführen

Wenn Sie eine Runnable-Klasse mit einem Thread-Schlaf haben, der auf einem eigenen Thread läuft (so erstelle ich Timer), Dann können Sie eine Methode zum Abbrechen (Kill) des Timers (Thread) ..