Ich wurde heute in einem Interview über die Thread-Konzepte in Java gefragt? Die Fragen waren ...
Ich habe außer der Definition von Thread keine Fragen beantwortet, auch das habe ich gerade vom Internet gelernt.
Kann mir jemand das klar erklären?
Aktualisieren :
Was ist ein Unterschied zwischen einem Thread und einer normalen Java-Klasse? Warum brauchen wir Threading? Kann ich Geschäftslogik in Threads ausführen? Kann ich eine andere Klassenmethode in Threads aufrufen?
Um Threads zu erstellen, erstellen Sie eine neue Klasse, die die Thread-Klasse erweitert und diese Klasse instanziiert. Die extending-Klasse muss die run () -Methode überschreiben und die start () -Methode aufrufen, um mit der Ausführung des Threads zu beginnen.
Innerhalb von run () definieren Sie den Code, der einen neuen Thread darstellt. Es ist wichtig zu verstehen, dass run () andere Methoden aufrufen, andere Klassen verwenden und Variablen wie den Hauptthread deklarieren kann. Der einzige Unterschied ist, dass run () den Einstiegspunkt für einen anderen, gleichzeitigen Ausführungsthread in Ihrem Programm festlegt. Dies wird beendet, wenn run () zurückgibt.
%Vor%Ausgabebildschirm:
%Vor%und sehen Sie dies:
und für Spring können Sie den Thread-Pool verwenden:
Multithreading ist eine Java-Funktion, die die gleichzeitige Ausführung von zwei oder mehr Teilen eines Programms zur maximalen Auslastung der CPU ermöglicht. Jeder Teil eines solchen Programms wird als Thread bezeichnet. Also,
Threads sind leichte Prozesse innerhalb eines Prozesses.
Threads können mit zwei Mechanismen erstellt werden:
Erstellen von Threads durch Erweitern der Thread-Klasse
Wir erstellen eine Klasse, die die Klasse java.lang.Thread
erweitert. Diese Klasse überschreibt die Methode run()
, die in der Klasse Thread
verfügbar ist. Ein Thread beginnt sein Leben in run()
method. Wir erstellen ein Objekt unserer neuen Klasse und rufen die Methode start()
auf, um die Ausführung eines Threads zu starten. Start()
ruft die Methode run()
für das Objekt Thread
auf.
Erstellen von Threads durch Implementieren der ausführbaren Schnittstelle
Wir erstellen eine neue Klasse, die java.lang.Runnable
interface implementiert und run()
method überschreibt. Dann instanziieren wir ein Thread-Objekt und rufen die Methode start()
für dieses Objekt auf.
Thread-Klasse im Vergleich zur ausführbaren Schnittstelle
Wenn wir die Thread-Klasse erweitern, kann unsere Klasse keine andere Klasse erweitern, da Java keine Mehrfachvererbung unterstützt. Wenn wir jedoch die Runnable-Schnittstelle implementieren, kann unsere Klasse noch andere Basisklassen erweitern.
Wir können die grundlegende Funktionalität eines Threads erreichen, indem wir die Thread-Klasse erweitern, da sie einige integrierte Methoden wie yield (), interrupt () usw. bereitstellt, die in Runnable interface nicht verfügbar sind.
Ich kann die ersten drei beantworten, da mir die Threading-Funktionen von Spring oder Flex nicht vertraut sind.
Ein Thread ist ein Objekt mit eigenen Registern, Stacks und Codesegmenten, die parallel zu anderen Threads in einem Prozess ausgeführt werden können (ein Prozess ist eine Sammlung von Threads).
Sie schreiben Multi-Threaded-Code, damit das Programm für Benutzerinteraktionen responsive ist. Bedenken Sie, wie ärgerlich es wäre, wenn Sie warten müssten, bis Ihr Browser eine Datei heruntergeladen hat, bevor Sie weiter surfen können.
Ich habe ein Beispiel in # 2 gegeben. Andere Beispiele sind Programme mit einer GUI (die GUI muss bei der Ausführung von Hintergrundaufgaben immer auf Benutzereingaben reagieren) oder Server-Software wie ein Webserver, auf dem Sie möglicherweise 1000 Anfragen pro Minute beantworten müssen. Es wäre besser, für jede dieser Antworten einen eigenen Thread zu haben.
Was den Frühling betrifft, ja, Sie können definitiv Ihre eigenen Threads erstellen. Es ist jedoch eine bessere Idee, die Thread-Pool-Unterstützung zu verwenden, die in beschrieben wird Kapitel 25 des Spring Framework Manual.
Wenn Sie jedoch Anfragen in einem Spring-basierten Webdienst (oder einem beliebigen Webdienst) spawnen, führt dies zu Ressourcenverwaltungsproblemen, die Sie möglicherweise vermeiden möchten ...
Ein Schlüsselkonzept zum Aufräumen ist, dass ein Thread ein OS-Planungsobjekt ist, das zufällig eine Java-Klasse hat, die es repräsentiert (wie es beispielsweise Fenster im UI-Subsystem tun würde). Threads sind selbst keine Art von Klasse.
Flex kann nicht direkt mit Java-Threads kommunizieren, es müsste eine Art von Messaging stattfinden, egal ob Sie JMS oder was auch immer verwenden, Flex über BlazeDS, GraniteDS oder LCDS kann mit JMS kommunizieren. Eine Sache, an die man sich auch erinnern sollte, ist, dass Flash / Flex im Moment sowieso single-threaded ist, aber hoch asynchron ... manche würden sagen, dass es asynchron ist ... also könnte die Verwendung von Java-Threads die Dinge nicht beschleunigen so groß eine Wirkung, wie Sie vielleicht hoffen.
Sehen Sie sich das Oracle Lernprogramm
anThreads werden manchmal als leichte Prozesse bezeichnet. Threads existieren innerhalb eines Prozesses - jeder Prozess hat mindestens einen. Threads teilen sich die Ressourcen des Prozesses, einschließlich Speicher und geöffnete Dateien. Dies ermöglicht eine effiziente, aber möglicherweise problematische Kommunikation.
Warum gehen wir zum Threading?
Multithread-Ausführung ist ein wesentliches Merkmal der Java-Plattform. Threads sind voneinander unabhängig.
Sie können Ihre Berechnung parallelisieren, indem Sie in mehrere Unterberechnungen aufteilen.
Sie können die CPU-Kerne Ihres Servers effektiv nutzen.
z.B.
%Vor%Wenn Sie dem Shared-Nothing-Ansatz (der nicht immer möglich ist) zwischen Ihren Threads folgen, bietet Multi-Threading-Anwendung einen hohen Durchsatz.
Ein Echtzeitbeispiel über die Threads.
Denken Sie an WhatsApp Art einer Chat-Anwendung.
Der Server sollte Chatnachrichten zwischen Tausenden von Benutzern senden und empfangen. Eine Single-Thread-Anwendung ist eine Katastrophe, um diesen Anwendungsfall zu behandeln.
Was ist ein Unterschied zwischen einem Thread und einer normalen Java-Klasse? Warum brauchen wir Threading? Kann ich Geschäftslogik in Threads ausführen? Kann ich eine andere Klassenmethode in Threads aufrufen?
Eine Thread-Klasse kann Runnable implementieren oder Thread . Sehen Sie sich die Oracle-Lernprogramm Seite
anSie können Geschäftslogik in Threads ausführen.
Sie können verschiedene Klassenmethoden in Threads aufrufen.
Ok, um zu beantworten, was ist Thread in Java in einfachen Worten ist es ein Programm / Stück Code, die gleichzeitig mit Ihrer normalen Klasse funktioniert. Ein Unterschied zwischen einer normalen Klasse und einem Thread besteht darin, dass ein Thread gleichzeitig parallel zur normalen Klasse arbeitet. Vereinfacht gesagt, sehe ich ein Beispiel, in dem ich mich gerade in der Hauptfunktion befinde und eine Funktion benötige, um etwas zu berechnen. Wenn also diese Funktion nicht in einem Thread ist, wird die Funktion zuerst ausgewertet und danach werde ich zur Hauptfunktion zurückkehren, wenn es andererseits ein Thread ist, dann berechnet die Funktion und der Hauptwille wird auch seinen nächsten Befehl berechnen.
Nun, wie ein Thread erstellt wird
1. Erweitern Sie die Thread-Klasse: Erweitern Sie die Thread-Klasse und schreiben Sie start()
its eine Funktion rufen Sie sie mit einem Objekt der aktuellen Klasse auf und schreiben Sie eine Funktion nämlich void run()
und schreiben Sie in diese Funktion den Code, der gleichzeitig ausgeführt werden soll.
Jedes Objekt der Klasse, die den Thread erweitert, ist ein benutzerdefinierter Thread. Standardmäßig ist jeder Thread inaktiv und um diesen Thread zu aktivieren oder aufzurufen, schreiben Sie einfach start()
, dies ruft automatisch run auf, das Ihren Code enthält.
Runnable
, aber da dies eine Schnittstelle ist, die mit der aktuellen Klasse kompatibel ist, ruft Aufruf von start die Funktion run()
auf, die in Schnittstelle geschrieben ist, aber unsere run()
-Funktion aufrufen rufe den Start mit einem Thread-Objekt wie diesem auf Thread t=new thread(this); t.start();
Nun, warum gehen wir für thread, das ist genau wie fragen, warum wir für Multicore-Prozessor gehen Sie bekommen, was ich sage, Multi Threading wird verwendet, um Aufgabe gleichzeitig auszuführen
Ein Echtzeit-Beispiel wäre ein Server, ein Server, betrachten Sie den Server von Google Mail. Wenn g Mail-Server nicht mit Multi-Threading geschrieben wurde, konnte ich mich nicht einloggen, ohne dass Sie sich abmelden, was auf der ganzen Welt nur eine Person bedeutet kann zu einer Zeit anmelden Sie sehen, wie unpraktisch es ist.
Tags und Links java multithreading