Threads work
Ζητούμενο
Στην υποεργασία αυτή καλούμαστε να λύσουμε ένα πρόβλημα υπολογισμού με χρήση νημάτων που αφορά τον πολλαπλασιασμό πίνακα με διάνυσμα. Επειδή ο πίνακας και το διάνυσμα θα γεμίζουν με τυχαίους αριθμούς, φτιάξαμε μία μέθοδο (randomNumber) η οποία παράγει τυχαίους αριθμούς
Στην συνέχεια θα παρουσιάσουμε την λειτουργία του νήματος. Κάθε νήμα θα εισάγει έναν πίνακα και ένα διάνυσμα, το νήμα θα κάνει τον πολλαπλασιασμό του πίνακα με το διάνυσμα και το αποτέλεσμα θα το επιστρέφει σε νέο διάνυσμα.
Το νέο διάνυσμα αποφασίσαμε να το δημιουργήσουμε δυναμικά με ArrayList. Τέλος με την μέθοδο getNewVector επιστρέφουμε το νέο διάνυσμα.
Για την εισαγωγή των διαστάσεων του πίνακα και αριθμό των threads που θα χρησιμοποιήσουμε , επιλογή από τον χρήστη, χρησιμοποιούμε την μέθοδο Scanner.in
Πρώτα επιλέγει ο χρήστης τον αριθμό των threads, με έλεγχο αν επέλεξε αριθμό δύναμη του 2
Στην συνέχεια επιλέγει ο χρήστης τις διαστάσεις του πίνακα με τους ελέγχους αν οι γραμμές του πίνακα είναι δύναμη του 2 και μεγαλύτερος αριθμός από τα threads, και οι στήλες του πίνακα να είναι τουλάχιστον 1 στήλη.
Αφού έχουμε τις διαστάσεις των πινάκων τους δημιουργούμε, Τον δισδιάστατο πίνακα Α με διαστάσεις nXm (οι διαστάσεις που έδωσε ο χρήστης) Τον μονοδιάστατο πίνακα του διανύσματος με μέγεθος όσο οι στήλες του πίνακα Α Και τον μονοδιάστατο πίνακα του νέου διανύσματος που θα προκύψει μετά τον πολλαπλασιασμό, εδώ επιλέξαμε δυναμικό πίνακα.
Στην συνέχεια γεμίζουμε με την χρήση της μεθόδου randomNumber και την χρήση διαφόρων loops, τους πίνακες Α και το διάνυσμα με τυχαίους αριθμούς (0-10).
Δημιουργούμε τον πίνακα των threads, διαιρούμε τις γραμμές του πίνακα με τον αριθμό των threads (βγαίνει ακέραιος αριθμός λόγω τον περιορισμών που έχουμε), έτσι σπάμε τον πίνακα σε παρτίδες. Κάθε παρτίδα πάει σε διαφορετικό thread.
Σε κάθε thread που τρέχει περνάει η παρτίδα (κομμάτι) του πίνακα και το διάνυσμα
Για την συμπλήρωση του νέου διανύσματος χρησιμοποιούμε την μέθοδο getNewVector με μια λούπα που θα μας εισάγει τις τιμές από όλα τα threads










