Witam.
Chciałbym prosić o jakieś wskazówki do poniższego zadania:
"Zbudować klasę Letters, która posłuży do równoleglego uruchamiania kodów, wypisujących co sekundę litery podane w napisie przekazanym do konstruktora klasy.
Po stworzeniu obiektu klasy Letters w metodzie main(...) klasy Main wystartować wszystkie wątki, w których mają być wypisywane podane litery.
Po wstrzymaniu działania metody main(...) na 5 sekund - zakończyć działanie wszystkich kodów, wypisujących litery.
Uruchomienie poniższego programu:
public class Main {
public static void main(String[] args) throws InterruptedException {
Letters letters = new Letters("ABCD");
for (Thread t : letters.getThreads()) System.out.println(t.getName());
/*<- tu uruchomić
wszystkie kody w wątkach
*/
Thread.sleep(5000);
/*<- tu trzeba zapisać
fragment, który kończy działanie kodów, wypisujących litery
*/
System.out.println("\nProgram skończył działanie");
}
}
powinno (w tej postaci) wypisać:
Thread A
Thread B
Thread C
Thread D
(po 5 sekundach)
Program skończył działanie
Natomiast po uzupełnieniu kodu w miejscah wskazanych przez /*<- */ - coś w rodzaju:
Thread A
Thread B
Thread C
Thread D
ACDBDBACACDBCBDA
Program skończył działanie.
Uwaga 1: modyfikacje klasy Main są dopuszczalne tylko w miejscach wskazanych przez /*<- */
Uwaga 2: nie wolno stosować System.exit
Uwaga 3: warto przy definiowaniu metody run() zastosować lambda-wyrażenie.
Mój obecny kod:
public class Main {
public static void main(String[] args) throws InterruptedException {
Letters letters = new Letters("ABCD");
for (Thread t : letters.getThreads()) System.out.println(t.getName());
//Wyrażenie lambda
(letters.getThreads()).forEach((t) -> t.start());
Thread.sleep(5000);
for (Thread t : letters.getThreads()){
t.interrupt();
}
System.out.println("\nProgram skończył działanie");
}
}
import java.util.ArrayList;
public class Letters extends Thread {
ArrayList<Thread> threads = new ArrayList<Thread>();
public Letters(){}
public Letters(String s){
for(int i = 0; i < s.length(); i++){
threads.add(new Thread("Thread " + s.substring(i, i+1)));
}
}
public ArrayList<Thread> getThreads(){
return threads;
}
public void run(){
while(true){
try{
System.out.print(this.getName());
Thread.sleep(1000);
} catch (InterruptedException ie){
System.out.println("Wątek przerwany");
}
}
}
}
Program nie odpala przeciążonej metody run() z klasy Letters bo w liście znajdują się obiekty klasy Thread, przez co nie wypisuje tych liter.
Pomoże ktoś?