multithreading java tutorial with examples
Αυτό το σεμινάριο εξηγεί τα πάντα σχετικά με το Multithreading In Java, Concurrency Implementation, τον κύκλο ζωής ενός νήματος, το Thread Class παράδειγμα, το Thread χρησιμοποιώντας Runnable Interface:
Η ταυτόχρονη στον κόσμο των υπολογιστών είναι η ικανότητα ενός συστήματος (είτε πρόκειται για εφαρμογή, υπολογιστή είτε για γλώσσα προγραμματισμού) να εκτελεί παράλληλα πολλές εμφανίσεις ενός προγράμματος ή μιας εφαρμογής.
Με ταυτόχρονη εκτέλεση παρουσιών ή προγραμμάτων διασφαλίζουμε υψηλή απόδοση και υψηλότερη απόδοση καθώς μπορούμε να χρησιμοποιήσουμε τους ανεκμετάλλευτους πόρους όπως το υλικό του λειτουργικού συστήματος κ.λπ. Για παράδειγμα, εάν ένα σύστημα διαθέτει αρκετούς CPU, τότε η εφαρμογή μπορεί να χρησιμοποιήσει αυτές τις CPU αποτελεσματικά και να αυξήσει την απόδοση.
=> Επισκεφτείτε εδώ για την αποκλειστική σειρά εκπαιδευτικών εκμάθησης Java.
Τι θα μάθετε:
- Τι είναι το Multithreading στην Java
- Τι είναι ένα νήμα στην Ιάβα
- συμπέρασμα
Τι είναι το Multithreading στην Java
Στην Java, τα νήματα μπορούν να θεωρηθούν ως η ραχοκοκαλιά της ταυτόχρονης ταυτότητας. Το νήμα είναι μια εκτελέσιμη, ελαφριά μονάδα που έχει πρόσβαση σε κοινόχρηστους πόρους καθώς και στη δική του στοίβα κλήσεων.
Μια εφαρμογή Java είναι μία διαδικασία και μέσα σε αυτήν την εφαρμογή, μπορούμε να έχουμε πολλά νήματα για να επιτύχουμε ταυτόχρονη.
Γνωρίζουμε ότι μια εφαρμογή που εκτελείται στο σύστημα μπορεί να έχει πολλές παρουσίες και αυτές συνήθως ονομάζονται εφαρμογές πολλαπλών εγγράφων. Αυτές οι παρουσίες εφαρμογής ονομάζονται διαδικασίες. Σε κάθε μια από αυτές τις διαδικασίες έχει εκχωρηθεί μια μονάδα εκτέλεσης γνωστή ως νήμα.
Ανάλογα με τις απαιτήσεις του λειτουργικού συστήματος και της εφαρμογής, η διαδικασία μπορεί να εκχωρηθεί είτε σε ένα νήμα είτε σε πολλά νήματα. Όταν η διαδικασία εφαρμογής έχει εκχωρηθεί πολλά νήματα, τότε πρέπει να εκτελέσουμε αυτά τα πολλαπλά νήματα ταυτόχρονα.
' Αυτή η τεχνική εκτέλεσης ή εκτέλεσης πολλαπλών νημάτων ταυτόχρονα ή ταυτόχρονα είναι γνωστή ως multithreading '
Το multithreading σημαίνει απλώς ότι έχουμε περισσότερα από ένα νήματα που εκτελούνται μέσα στην ίδια εφαρμογή.
Η γλώσσα προγραμματισμού Java έχει ενσωματωμένη υποστήριξη για multithreading.
Το multithreading απεικονίζεται στο παραπάνω διάγραμμα. Όπως φαίνεται, υπάρχουν πολλά νήματα που εκτελούνται ταυτόχρονα μέσα σε μια εφαρμογή.
Για παράδειγμα, μια εφαρμογή για επιτραπέζιους υπολογιστές που παρέχει λειτουργίες όπως επεξεργασία, εκτύπωση κ.λπ. είναι μια εφαρμογή πολλαπλών νημάτων. Σε αυτήν την εφαρμογή, καθώς η εκτύπωση είναι μια διαδικασία παρασκηνίου, μπορούμε να εκτελέσουμε την επεξεργασία εγγράφων και την εκτύπωση εγγράφων ταυτόχρονα αναθέτοντας αυτές τις λειτουργίες σε δύο διαφορετικά νήματα.
Τα νήματα σε εφαρμογές πολλαπλών νημάτων λειτουργούν παράλληλα μεταξύ τους με ταυτόχρονο τρόπο. Έτσι, το multithreading είναι επίσης ένα μέρος της ταυτότητας στην Java. Σημειώστε ότι αν και υπάρχουν πολλά νήματα, μοιράζονται την περιοχή μνήμης εξοικονομώντας έτσι μνήμη. Επίσης, τα νήματα μπορούν εύκολα να αλλάξουν περιβάλλοντα σε χρόνο μηδέν.
Το multithreading είναι κυρίως χρήσιμο καθώς παρέχει ταυτόχρονη εκτέλεση δύο ή περισσότερων τμημάτων μιας εφαρμογής. Αυτό επιτρέπει στην εφαρμογή να χρησιμοποιεί το χρόνο CPU στο μέγιστο και ο χρόνος αδράνειας διατηρείται στο ελάχιστο.
Τα παρακάτω είναι μερικοί από τους όρους που πρέπει να γνωρίζουμε σε σχέση με το περιβάλλον πολλαπλών νημάτων, καθώς χρησιμοποιούνται συχνά.
Πολλαπλές εργασίες: Στην εκτέλεση πολλαπλών εργασιών, εκτελούνται ταυτόχρονα περισσότερες από μία εργασίες.
Πολλαπλών νημάτων: Το Multithreading, όπως ήδη αναφέρθηκε, είναι μια διαδικασία εκτέλεσης πολλαπλών νημάτων ταυτόχρονα.
πώς να ρυθμίσετε το maven στην έκλειψη
Πολυεπεξεργασία: Στην πολλαπλή επεξεργασία, εκτελούνται ταυτόχρονα περισσότερες από μία διαδικασίες. Παρόμοιο με το multitasking, αλλά εδώ εμπλέκονται περισσότερες από μία CPU.
Παράλληλη επεξεργασία: Η παράλληλη επεξεργασία είναι μια τεχνική όπου πολλές CPU λειτουργούν ταυτόχρονα σε ένα σύστημα υπολογιστή.
Έχοντας συζητήσει το multithreading, τίθεται το ερώτημα γιατί χρειαζόμαστε καθόλου multithreading;
Οφέλη του Multithreading
Το Multithreading έχει διάφορα οφέλη που βοηθούν στον αποτελεσματικό προγραμματισμό.
Τα παρακάτω σημεία θα το καταστήσουν σαφές.
# 1) Αποτελεσματική χρήση συστημάτων μεμονωμένου CPU
Όταν υπάρχει μόνο μία CPU στο σύστημα, με ένα μόνο νήμα τότε χάνεται ο χρόνος της CPU. Όταν το νήμα είναι απασχολημένο με τη χρήση άλλων πόρων όπως το IO, η CPU είναι αδρανής. Μπορούμε να το βελτιώσουμε και να χρησιμοποιήσουμε καλύτερα την CPU έχοντας πολλαπλές εφαρμογές.
Με τη χρήση πολλαπλών νημάτων, εάν το ένα νήμα γίνεται με CPU, τότε το άλλο νήμα μπορεί να το χρησιμοποιήσει. Με πολλά νήματα, ο χρόνος αδράνειας της CPU θα μειωθεί σημαντικά.
# 2) Αποτελεσματική χρήση πολλαπλών συστημάτων CPU
Ακριβώς όπως οι μεμονωμένοι επεξεργαστές, ακόμα και με συστήματα που έχουν πολλαπλούς επεξεργαστές, οι εφαρμογές πολλαπλών νημάτων μπορούν να χρησιμοποιούν αποτελεσματικά πολλές CPU.
# 3) Βελτιωμένη εμπειρία χρήστη σε σχέση με την ανταπόκριση και τη δικαιοσύνη
Η απόκριση του συστήματος βελτιώνεται με εφαρμογές πολλαπλών νημάτων. Δεν βιώνουμε το 'GUI κρέμεται' όταν έχουμε πολλά νήματα που εκτελούν διάφορες εργασίες στην εφαρμογή και οι χρήστες δεν χρειάζεται να περιμένουν για μεγάλο χρονικό διάστημα για να λάβουν απάντηση για τα αιτήματά τους.
Ομοίως, οι χρήστες είναι σωστά υπηρεσίες σε συστήματα πολλαπλών νημάτων.
Πώς να εφαρμόσετε το Concurrency στην Java
Η πρώτη τάξη με την οποία μπορούμε να εφαρμόσουμε ταυτόχρονη εφαρμογή στην Java είναι java.lang.Tread τάξη. Αυτή η κλάση νήματος αποτελεί τη βάση της ταυτόχρονης λειτουργίας στην Java.
Εχουμε επισης java.lang. Εκτελέσιμο διεπαφή που μπορεί να εφαρμοστεί από μια κλάση Java για να αφαιρεθεί η συμπεριφορά του νήματος. Για προηγμένη ανάπτυξη εφαρμογών, μπορούμε να χρησιμοποιήσουμε το java.util.concurrent διαθέσιμο πακέτο από το Java 1.5.
Προχωρώντας μπροστά, θα συζητήσουμε λεπτομερώς την ταυτόχρονη εφαρμογή στην Java. Ας συζητήσουμε και κατανοήσουμε την έννοια των νημάτων σε Java σε αυτό το σεμινάριο. Στα επόμενα σεμινάριά μας για το multithreading, θα διερευνήσουμε διάφορες έννοιες multithreading και concurrency.
Τι είναι ένα νήμα στην Ιάβα
Ένα μονό νήμα μπορεί να οριστεί ως η μικρότερη και ελαφριά μονάδα επεξεργασίας. Στην Java, τα νήματα χρησιμοποιούνται σε προγράμματα που χρησιμοποιούν την τάξη «Thread».
Τα νήματα Java είναι δύο τύπων:
# 1) Νήμα χρήστη: το νήμα χρήστη δημιουργείται κατά την πρώτη εκκίνηση της εφαρμογής. Στη συνέχεια μπορούμε να δημιουργήσουμε όσους χρήστες και νήμα δαίμονα.
# 2) Νήμα Daemon: Τα νήματα daemon χρησιμοποιούνται κυρίως στο παρασκήνιο και χρησιμοποιούνται για εργασίες όπως ο καθαρισμός της εφαρμογής κ.λπ.
Τα νήματα μειώνουν το κόστος συντήρησης της εφαρμογής. Μειώνει επίσης την εφαρμογή γενικά.
Ένα παράδειγμα νήματος φαίνεται παρακάτω:
public class Main{ public static void main (String () args){ System.out.println('This is a thread'); } }
Το παραπάνω πρόγραμμα θα εμφανίσει 'Αυτό είναι ένα νήμα' όπως όταν ξεκινά η εφαρμογή δημιουργείται ένα νήμα χρήστη. Στο παραπάνω πρόγραμμα, η κύρια λειτουργία είναι το σημείο εκκίνησης της εφαρμογής και δημιουργεί ένα νήμα χρήστη.
Ο κύκλος ζωής ενός νήματος
Το παρακάτω διάγραμμα απεικονίζει τον κύκλο ζωής ενός νήματος στην Java.
Όπως φαίνεται στο παραπάνω διάγραμμα, ένα νήμα στην Java έχει τις ακόλουθες καταστάσεις:
# 1) Νέο: Αρχικά, το νήμα που μόλις δημιουργήθηκε από την κλάση νήματος έχει μια «νέα» κατάσταση. Δεν έχει ακόμη ξεκινήσει. Αυτό το νήμα ονομάζεται επίσης «Γεννημένο νήμα» .
# 2) Με δυνατότητα εκτέλεσης: Σε αυτήν την κατάσταση, η παρουσία ενός νήματος καλείται χρησιμοποιώντας τη μέθοδο 'αρχή' .
# 3) Τρέξιμο: Η μέθοδος έναρξης της παρουσίας νήματος καλείται και το νήμα ξεκινά την εκτέλεση. Αυτή είναι η κατάσταση λειτουργίας. Κυρίως προγραμματιστής προγραμματίζει και διαχειρίζεται τα νήματα.
# 4) Αποκλεισμένο: Υπάρχουν πολλά νήματα σε μια εφαρμογή. Αυτά τα νήματα πρέπει να περιμένουν άλλο καθώς η εκτέλεση τους πρέπει να συγχρονιστεί.
# 5) Τερματίστηκε: Μόλις τελειώσει η διαδικασία εκτέλεσης του νήματος, το νήμα τερματίζεται ή η εκτέλεση του διακόπτεται.
Έτσι δημιουργείται ένα νήμα, μετά προγραμματίζεται και αργότερα ο προγραμματιστής εκτελεί το νήμα. Ενώ το τρέξιμο νήμα μπορεί να μπλοκαριστεί ή να ανασταλεί για κάποια άλλη δραστηριότητα. Στη συνέχεια συνεχίζεται και ενώ η επεξεργασία ολοκληρώνεται, το νήμα εκτελείται.
Προτεραιότητες νημάτων
Μια προτεραιότητα νήματος αποφασίζει τον τρόπο επεξεργασίας ενός νήματος σε σχέση με τα άλλα νήματα μιας εφαρμογής. Η προτεραιότητα νήματος είναι ακέραιος αριθμός.
Παρακάτω αναφέρονται ορισμένα σημεία που πρέπει να θυμάστε σχετικά με τις προτεραιότητες νήματος:
- Οι προτεραιότητες νημάτων είναι ακέραιοι αριθμοί.
- Χρησιμοποιώντας την προτεραιότητα νήματος, μπορούμε να αποφασίσουμε πότε πρέπει να αλλάξουμε από ένα νήμα σε κατάσταση λειτουργίας σε άλλο. Αυτή είναι η διαδικασία αλλαγής περιβάλλοντος όπου αλλάζουμε τα περιβάλλοντα των νημάτων.
- Οποτεδήποτε ένα νήμα μπορεί να ελευθερώσει τον έλεγχο του CPU. Τότε το νήμα με την υψηλότερη προτεραιότητα μπορεί να αναλάβει.
- Ομοίως, ένα νήμα υψηλότερης προτεραιότητας μπορεί να προεπιλέξει οποιοδήποτε άλλο νήμα με χαμηλότερη προτεραιότητα.
- Η κλάση νημάτων παρέχει μια μέθοδο setPriority () που χρησιμοποιείται για τον καθορισμό της προτεραιότητας για το νήμα.
- Μπορούμε επίσης να χρησιμοποιήσουμε τις σταθερές MIN_PRIORITY, MAX_PRIORITY ή NORM_PRIORITY στη θέση των ακέραιων αριθμών.
Δημιουργήστε ένα νήμα
Μπορούμε να δημιουργήσουμε ένα νήμα χρησιμοποιώντας έναν από τους παρακάτω τρόπους:
- Επέκταση της κλάσης Java 'Thread'.
- Υλοποίηση «Runnable».
Επέκταση της κλάσης Java 'Thread'
Η τάξη «Νήμα» περιέχει τους κατασκευαστές και τις μεθόδους που μας επιτρέπουν να δημιουργούμε και να εκτελούμε λειτουργίες σε ένα αντικείμενο νήματος. Εσωτερικά η κλάση νήματος εφαρμόζει διεπαφή Runnable και επεκτείνει επίσης την κλάση αντικειμένων.
Ο παρακάτω πίνακας παρέχει μια σύνοψη διαφόρων κατασκευαστών και μεθόδων μιας κλάσης Thread ().
Οικοδόμος/ | Πρωτότυπο | Περιγραφή |
---|---|---|
ύπνος | δημόσιος κενός ύπνος (μεγάλα χιλιοστά του δευτερολέπτου) | Η εκτέλεση του τρέχοντος νήματος διακόπτεται για συγκεκριμένα χιλιοστά του δευτερολέπτου. |
Κατασκευαστής νημάτων () | Νήμα() | Προεπιλεγμένος κατασκευαστής για τη δημιουργία ενός αντικειμένου νήματος. |
Νήμα (Όνομα συμβολοσειράς) | Κατασκευαστής για να δημιουργήσετε ένα αντικείμενο νήματος με καθορισμένο όνομα. | |
Νήμα (Runnable r) | Δημιουργήστε μια παρουσία νήματος με καθορισμένο αντικείμενο διεπαφής με δυνατότητα εκτέλεσης. | |
Νήμα (Runnable r, String name) | Δημιουργήστε μια παρουσία νήματος με καθορισμένο αντικείμενο διεπαφής με δυνατότητα εκτέλεσης και δεδομένο όνομα | |
τρέξιμο | δημόσια άκυρη εκτέλεση () | Η μέθοδος Run εκτελεί την ενέργεια για ένα νήμα. Επικαλείται το νήμα. |
αρχή | δημόσια άκυρη εκκίνηση () | Χρησιμοποιήθηκε για να ξεκινήσει η εκτέλεση του νήματος. Εσωτερικά η μέθοδος JVM call run () σε αυτό το νήμα. |
Συμμετοχή | δημόσια άκυρη συμμετοχή () | Περιμένετε να πεθάνει το νήμα |
δημόσιο κενό συμμετοχής (μεγάλα χιλιοστά του δευτερολέπτου) | Περιμένετε συγκεκριμένα χιλιοστά του δευτερολέπτου για να πεθάνει το νήμα. | |
getPriority | δημόσια int getPriority () | Επιστρέψτε την προτεραιότητα του νήματος |
setPriority | public int setPriority (προτεραιότητα int) | Αλλάξτε την προτεραιότητα του νήματος σε καθορισμένη προτεραιότητα |
getName | δημόσια συμβολοσειρά getName () | επιστρέψτε το όνομα του νήματος. |
setName | public void setName (Όνομα συμβολοσειράς) | Ορίστε το όνομα του νήματος σε καθορισμένη συμβολοσειρά |
currentThread | public Thread currentThread () | Επιστρέφει την αναφορά του νήματος που είναι ενεργή |
getId | δημόσια int getId () | Αναγνωριστικό νήματος επιστροφής |
getState () | δημόσιο Thread.State getState () | Επιστρέφει την τρέχουσα κατάσταση του νήματος |
ειναι ΖΩΝΤΑΝΟΣ | δημόσια boolean isAlive () | Ελέγξτε αν το νήμα είναι ζωντανό και επιστρέψτε αληθινό εάν ναι. |
απόδοση παραγωγής | δημόσια άκυρη απόδοση () | Παύει προσωρινά το τρέχον νήμα και επιτρέπει σε άλλα νήματα να εκτελέσουν. |
είναι ο Δαίμονας | δημόσια boolean isDaemon () | Ελέγξτε αν το νήμα είναι νήμα δαίμονα. επιστρέψτε αληθινό εάν ναι. |
setDaemon | public void setDaemon (boolean b) | Ορίστε το νήμα ως νήμα δαίμονα εάν b = true; αλλιώς οριστεί ως νήμα χρήστη. |
διακοπή | διακοπή δημόσιου κενού () | Διακόψτε το τρέχον νήμα. |
είναι Διακοπή | το δημόσιο boolean είναι Διακοπή () | Ελέγξτε εάν το νήμα έχει διακοπεί. |
διακόπηκε | δημόσιο στατικό boolean διακόπηκε () | Ελέγξτε εάν έχει διακοπεί το τρέχον νήμα. |
dumpStack | Static void dumpStack () | Εκτυπώνει ένα ίχνος στοίβας του τρέχοντος νήματος στην τυπική ροή σφαλμάτων. |
αναστέλλω | δημόσια αναστολή αναστολής () | Αναστέλλει όλα τα νήματα. (** η μέθοδος έχει καταργηθεί στις πιο πρόσφατες εκδόσεις Java) |
ΒΙΟΓΡΑΦΙΚΟ | δημόσιο άκυρο βιογραφικό () | Συνέχιση νήματος σε αναστολή. (** η μέθοδος έχει καταργηθεί στις πιο πρόσφατες εκδόσεις Java) |
να σταματήσει | δημόσια στάση κενού () | Σταματά το νήμα. (** η μέθοδος έχει καταργηθεί στις πιο πρόσφατες εκδόσεις Java) |
Θα επεξεργαστούμε αυτές τις μεθόδους νήματος στο επόμενο σεμινάριό μας για το multithreading.
Ξεκινώντας ένα νήμα
Η μέθοδος start () που χρησιμοποιείται για την εκκίνηση του νήματος εκτελεί τα ακόλουθα βήματα:
- Ξεκινά μια νέα παρουσία νήματος με ένα νέο CallStack.
- Η κατάσταση του νήματος αλλάζει από νέο σε τρέξιμο.
- Όταν είναι η στροφή του νήματος, εκτελεί τη μέθοδο run ().
Υλοποίηση της διεπαφής «Runnable»
Μια παρουσία νήματος μπορεί επίσης να δημιουργηθεί χρησιμοποιώντας τη διεπαφή Runnable. Για να δημιουργήσετε μια παρουσία νήματος, η κλάση της οποίας τα αντικείμενα πρέπει να εκτελεστούν από ένα νήμα πρέπει να εφαρμόσει τη διεπαφή Runnable.
Η διεπαφή Runnable έχει μόνο μία μέθοδο:
public void run () => this method is used to execute the thread.
Παράδειγμα κλάσης νημάτων
Τώρα ας δείξουμε νήμα σε Java χρησιμοποιώντας την κλάση νήματος.
//class inherited from 'Thread' class ThreadClassDemo extends Thread { private int number; //class constructor public ThreadClassDemo(int number) { this.number = number; } //run method => execution code for thread public void run() { int counter = 0; int numInt = 0; //prints the number till specified number is reached, starting from 10 do { numInt = (int) (counter + 10); System.out.println(this.getName() + ' prints ' + numInt); counter++; } while(numInt != number); System.out.println('** Correct! ' + this.getName() + 'printed ' + counter + ' times.**'); } } public class Main { public static void main(String () args) { System.out.println('Starting thread_1...'); //create a thread class instance Thread thread_1 = new ThreadClassDemo(15); //start the thread thread_1 thread_1.start(); try { //wait for thread_1 to die thread_1.join(); } catch (InterruptedException e) { System.out.println('Thread interrupted.'); } System.out.println('Starting thread_2...'); Thread thread_2 = new ThreadClassDemo(20); //start thread_2 thread_2.start(); System.out.println('main() is ending...'); } }
Παραγωγή
Java Thread χρησιμοποιώντας διεπαφή με δυνατότητα εκτέλεσης
Το ακόλουθο παράδειγμα δείχνει τη χρήση της διεπαφής Runnable για τη δημιουργία μιας παρουσίας νήματος.
//class implements Runnable interface class RunnableDemo implements Runnable { private String message; //class constructor public RunnableDemo(String message) { this.message = message; } //run method public void run() { while(true) { System.out.println(message); } } } public class Main { public static void main(String () args) { //create first thread instance hello Runnable hello = new RunnableDemo('Hello, Greetings!!!'); Thread thread1 = new Thread(hello); thread1.setDaemon(true); //set this thread as daemon thread1.setName('hello'); System.out.println('Starting First thread...'); //start the thread thread1.start(); //create second thread instance bye Runnable bye = new RunnableDemo('Bye for now!!'); Thread thread2 = new Thread(bye); thread2.setPriority(Thread.MIN_PRIORITY); //set priority to min thread2.setDaemon(true); //set as daemon thread System.out.println('Starting goodbye thread...'); //start the thread thread2.start(); System.out.println('main() is ending...'); } }
Παραγωγή
Πώς να σταματήσετε ένα νήμα στην Java
Έχουμε δει τα παραπάνω παραδείγματα. Από αυτά τα παραδείγματα, γνωρίζουμε ότι όταν η μέθοδος εκτέλεσης τελειώσει την εκτέλεση, το νήμα σταματά ή επίσης σταματά λόγω κάποιων εξαιρέσεων.
Οι παλαιότερες εκδόσεις της Java είχαν μια μέθοδο stop () στην κλάση Thread που θα μπορούσε να χρησιμοποιηθεί για να σταματήσει άμεσα το νήμα. Αλλά έχει πλέον καταργηθεί για λόγους ασφαλείας. Επομένως πρέπει να χρησιμοποιήσουμε τις άλλες μεθόδους για να σταματήσουμε το νήμα που εκτελεί.
Υπάρχουν δύο μέθοδοι που μπορούμε να χρησιμοποιήσουμε για να σταματήσουμε το νήμα.
- Χρήση μιας μεταβλητής boolean Volatile
- Χρησιμοποιώντας Διακοπές.
Σε αυτήν την ενότητα, θα συζητήσουμε και τις δύο αυτές μεθόδους διακοπής ενός νήματος.
Χρησιμοποιώντας μια μεταβλητή Boolean μεταβλητή
Σε αυτήν τη μέθοδο, διατηρούμε μια boolean μεταβλητή, για παράδειγμα, για να σταματήσουμε το νήμα. Το νήμα εκτελείται εφόσον η μεταβλητή boolean έχει οριστεί σε true. Τη στιγμή που γίνεται λάθος, το νήμα σταματά.
Η ειδικότητα αυτής της μεθόδου είναι ότι δηλώνουμε τη μεταβλητή boolean ως « πτητικός Έτσι ώστε να διαβάζεται πάντα από την κύρια μνήμη και το πρόγραμμα δεν μπορεί να το αποθηκεύσει στην προσωρινή μνήμη της CPU. Με αυτόν τον τρόπο, δεν θα υπάρξει διαφορά στις τιμές που ορίζονται και διαβάζονται.
Η εφαρμογή της διακοπής ενός νήματος χρησιμοποιώντας μια πτητική μεταβλητή boolean φαίνεται παρακάτω.
class StopThread extends Thread { private volatile boolean stop_flag = true; //initially set to true public void stopRunning() { stop_flag = false; //set stop_flag to false } @Override public void run() { while (stop_flag) { //keep checking value of stop_flag System.out.println('Thread is running...'); } System.out.println('Thread stopped!!!'); } } public class Main { public static void main(String() args) { //create a thread instance StopThread stop_thread = new StopThread(); //start the thread stop_thread.start(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //call stopRunning() method to stop the thread stop_thread.stopRunning(); } }
Παραγωγή
Σημείωση: Εδώ έχουμε δείξει μόνο ένα μέρος της εξόδου. Το νήμα μπορεί να τρέξει για αρκετά λεπτά πριν σταματήσει. Για να έχουμε διαφορετική έξοδο σε διαφορετικά συστήματα.
Χρησιμοποιώντας Διακοπές
Εδώ το νήμα σταματά να χρησιμοποιεί τη μέθοδο διακοπής () όπως έχουμε ήδη συζητήσει παραπάνω στις μεθόδους κλάσης νήματος. Η μέθοδος διακοπής () ορίζει την κατάσταση του νήματος ως διακοπής. Αυτή η κατάσταση μεταβιβάζεται στον βρόχο while της μεθόδου εκτέλεσης (). Μπορούμε να αποκτήσουμε την κατάσταση διακοπής χρησιμοποιώντας τη μέθοδο διακοπής ().
Το ακόλουθο πρόγραμμα δείχνει τη χρήση της μεθόδου διακοπής () για να σταματήσει το νήμα.
class StopThread extends Thread { @Override public void run() { while (!Thread.interrupted()) { //check for interrupted status System.out.println('Thread is running...'); } System.out.println('Thread stopped!!!'); } } public class Main { public static void main(String() args) { //create a thread instance StopThread stop_thread = new StopThread(); //start the thread stop_thread.start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } //interrupt the thread stop_thread.interrupt(); } }
Παραγωγή
Συχνές Ερωτήσεις
Q # 1) Γιατί χρησιμοποιούμε το Multithreading στην Java;
Απάντηση: Το Multithreading επιτρέπει ταυτόχρονη ή ταυτόχρονη εκτέλεση δύο ή περισσότερων νημάτων σε μια εφαρμογή. Η ταυτόχρονη εκτέλεση μεγιστοποιεί την Απόδοση και χρησιμοποιεί επίσης τη CPU στο μέγιστο.
Q # 2) Τι είναι το Multithreading; Ποιοι είναι οι τύποι του;
Απάντηση: Πολλαπλών νημάτων σημαίνει εκτέλεση περισσότερων από ένα νήματα. Αυτή η εκτέλεση μπορεί να είναι ταυτόχρονη ή παράλληλη. Έτσι, το multithreading έχει δύο τύπους, δηλαδή ταυτόχρονο ή παράλληλο.
Q # 3) Τι είναι το Multithreading vs. Multiprocessing;
Απάντηση: Στο multithreading, υπάρχουν πολλά νήματα για τις ίδιες ή διαφορετικές διαδικασίες και αυτά τα νήματα εκτελούνται ταυτόχρονα για να βελτιώσουν την ταχύτητα υπολογισμού ενός συστήματος. Στην πολυεπεξεργασία, ένα σύστημα έχει περισσότερες από δύο CPU και πολλές διαδικασίες εκτελούνται ταυτόχρονα.
Q # 4) Ποια είναι τα πλεονεκτήματα του Multithreading στην Java;
Απάντηση: Χρησιμοποιώντας το multithreading μπορούμε να εκτελέσουμε ταυτόχρονα διαφορετικά τμήματα μιας εφαρμογής χρησιμοποιώντας νήματα. Το multithreading αυξάνει την απόδοση του συστήματος. Το multithreading μεγιστοποιεί επίσης τη χρήση της CPU καθώς διαφορετικά νήματα χρησιμοποιούν συνεχώς τη CPU.
Ε # 5) Είναι καλό το Multithreading για παιχνίδια;
Απάντηση: Ναι, ειδικά για μοντέρνα παιχνίδια.
συμπέρασμα
Πρόκειται για την εισαγωγή πολλαπλών νημάτων. Σε αυτό το σεμινάριο συζητήσαμε τη συνάφεια και το multi-threading στην Java. Συζητήσαμε για τη δημιουργία ενός νήματος με την κλάση του νήματος καθώς και τη διεπαφή Runnable και παρέχουμε τα κατάλληλα παραδείγματα.
Έχουμε μάθει επίσης τις έννοιες ενός νήματος και τη δημιουργία του λεπτομερώς. Οι έννοιες του νήματος, συμπεριλαμβανομένου του κύκλου ζωής ενός νήματος, της διακοπής ενός νήματος, των τύπων νημάτων κ.λπ. έχουν συζητηθεί σε αυτό το σεμινάριο.
pl sql συνεντεύξεις ερωτήσεις και απαντήσεις για έμπειρους
Συζητήσαμε επίσης το multithreading σε μήκος και ταυτόχρονη χρήση στην Java. Στο τέλος αυτού του σεμιναρίου, ο αναγνώστης θα πρέπει να είναι σε θέση να κατανοήσει εύκολα τις έννοιες της ταυτότητας και των πολλαπλών νημάτων και επίσης νήματα στην Java.
=> Παρακολουθήστε εδώ την απλή εκπαίδευση Java.
Συνιστώμενη ανάγνωση
- Multithreading σε C ++ με παραδείγματα
- Νήματα Java με μεθόδους και κύκλο ζωής
- Thread.Sleep () - Thread Sleep () Μέθοδος στην Java με παραδείγματα
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- Εκμάθηση Java Reflection με παραδείγματα
- Το Java String περιέχει () Μέθοδος Εκμάθησης με Παραδείγματα
- Jagged Array In Java - Εκμάθηση με παραδείγματα
- Εκπαιδευτικό μάθημα Java Scanner με παραδείγματα