1) Ist das möglich? Was sind die Auswirkungen?
Ja, es ist möglich.
Die Implikation ist, dass jeder Zustand in der Runnable (möglicherweise) von allen Threads geteilt wird, und der Zugriff auf/update von diesem Zustand muss ordnungsgemäß synchronisiert werden.
2) Wenn ich Thread.sleep aufrufen (0); Werden in der Klasse MyRunnable beide Threads inaktiviert, weil sie das gleiche Objekt sind oder ist die Thread-Entity vollständig vom Objekt getrennt?
Nein, werden sie nicht.
Der Thread unterscheidet sich logisch von der Runnable
. Der Aufruf von Thread.sleep()
wirkt sich nicht direkt auf die Runnable
und andere Threads aus, die sie möglicherweise teilen. (Es könnte andere Threads bewirken indirekt, zB wenn ein Thread schläft, während es die Runnable primitive Sperre hält, und die anderen Threads müssen die Sperre erwerben, um Fortschritte zu machen.)
3) Wäre es überhaupt einen Grund geben, um dies zu tun, wenn nicht, bitte beantworte noch die beiden obigen Fragen, weil ich den Thread-Mechanismus noch nicht vollständig verstanden habe?
Sie Macht dies tun, wenn kein Thread-spezifische Zustand mit dem Runnable
zugeordnet ist und Sie wollten Raum Gemeinkosten oder die Gemeinkosten der Initialisierung des Runnable
minimieren. Solche Anwendungsfälle sind jedoch in der Praxis selten.
In der überwiegenden Mehrheit der tatsächlichen Anwendungsfälle benötigt jeder Thread eine eindeutige Runnable
Instanz.
Warum testest du es nicht selbst aus und siehst es? –
Der Versuch, zu erkennen, was mit Thread nur durch Tests passiert, kann manchmal aufgrund der Art der Threads zu nicht eindeutigen Ergebnissen führen. Ich möchte in diesem Fall die Robustheit meines Programms nicht dem Zufall überlassen. – rubixibuc