java:concurrency_intro

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
java:concurrency_intro [2015/03/24 12:44]
gthanos created
java:concurrency_intro [2015/03/24 13:00]
gthanos [Δημιουργία και εκτέλεση νημάτων]
Line 12: Line 12:
  
 Η πολυνηματική εκτέλεση αποτελεί βασικό χαρακτηριστικό της πλατφόρμας Java. Κάθε εφαρμογή έχει τουλάχιστον ένα νήμα (ή περισσότερα,​ αν μετρήσουμε και τα νήματα του JVM για κάθε διεργασία). Για τον προγραμματιστή αρχικά υπάρχει μόνο ένα νήμα το οποίο εκτελείται μέσα από τη μέθοδο //main//. Το νήμα αυτό έχει τη δυνατότητα να δημιουργήσει πρόσθετα νήματα,​ όπως θα δείξουμε στη συνέχεια. Η πολυνηματική εκτέλεση αποτελεί βασικό χαρακτηριστικό της πλατφόρμας Java. Κάθε εφαρμογή έχει τουλάχιστον ένα νήμα (ή περισσότερα,​ αν μετρήσουμε και τα νήματα του JVM για κάθε διεργασία). Για τον προγραμματιστή αρχικά υπάρχει μόνο ένα νήμα το οποίο εκτελείται μέσα από τη μέθοδο //main//. Το νήμα αυτό έχει τη δυνατότητα να δημιουργήσει πρόσθετα νήματα,​ όπως θα δείξουμε στη συνέχεια.
 +
 +===== Δημιουργία και εκτέλεση νημάτων =====
 +
 +Υπάρχουν δύο παρεμφερείς τρόποι για την δημιουργία και εκτέλεση ενός νήματος. Και οι δύο παρατίθενται παρακάτω:​
 +
 +<code java HelloRunnable.java>​
 +public class HelloRunnable implements Runnable {
 +
 +    public void run() {
 +        System.out.println("​Hello from a thread!"​);​
 +    }
 +
 +    public static void main(String args[]) {
 +        (new Thread(new HelloRunnable())).start();​
 +    }
 +}
 +</​code>​
 +
 +<code java HelloThread.java>​
 +public class HelloThread extends Thread {
 +
 +    public void run() {
 +        System.out.println("​Hello from a thread!"​);​
 +    }
 +
 +    public static void main(String args[]) {
 +        (new HelloThread()).start();​
 +    }
 +}
 +</​code>​
 +
 +Παρατηρείστε ότι και τα δύο παραπάνω παραδείγματα καλούν την μέθοδο [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​lang/​Thread.html#​start()|Thread.start()]]. Από τα δύο το πρώτο είναι πιο γενικό,​ καθώς δεν απαιτείται η κλάση σας να είναι απόγονος της κλάσης [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​lang/​Thread.html|Thread]].
 +
 +===== Σταματώντας την εκτέλεση ενός νήματος μέσω της μεθόδου sleep() =====
 +
 +Η μέθοδος sleep δίνει την δυνατότητα σε ένα νήμα να σταματήσει την εκτέλεση του για ένα συγκεκριμένο χρονικό διάστημα. Κατά το διάστημα αυτό, άλλες διεργασίες ή threads της υφιστάμενης διεργασίες μπορούν να εκτελεστούν. Η χρονική διάρκεια κατά την οποία θα παύσει η εκτέλεση ενός thread μπορεί να μην είναι ακριβώς η χρονική διάρκεια που επιλέξαμε,​ καθώς ο χρονοπρογραμματισμός των threads εξαρτάται και από το λειτουργικό σύστημα. Δείτε το παρακάτω παράδειγμα κλήσης της μεθόδου sleep()
 +
 +<code java SleepMessages.java>​
 +public class SleepMessages {
 +    public static void main(String args[])
 +        throws InterruptedException {
 +        String importantInfo[] = {
 +            "Mares eat oats",
 +            "Does eat oats",
 +            "​Little lambs eat ivy",
 +            "A kid will eat ivy too"
 +        };
 +
 +        for (int i=0; i<​importantInfo.length;​ i++) {
 +            //Pause for 2 seconds
 +            Thread.sleep(2000);​
 +            //Print a message
 +            System.out.println(importantInfo[i]);​
 +        }
 +    }
 +}
 +</​code>​
 +
 +
  
java/concurrency_intro.txt · Last modified: 2016/02/26 11:15 (external edit)