Crea el programa FibonacciConcurrent que vaja demanant a la persona usuària nombres
enters i naturals (majors de 0). El programa deixa de demanar nombres quan s'introdueix un 0.
Per cada nombre introduït, el programa ha de llançar un fil que calcule els N primers nombres
de la successió de Fibonacci – Viquipèdia
i els mostre per pantalla.
Utilitzar nombres majors de 40 pot provocar un desbordament del tipus de dades int.
Si vols provar amb nombres majors, pots utilitzar el tipus de dades long.
Començant a calcular...
FIL1: Pas 1 de 1: 0
FIL2: Pas 1 de 5: 0
FIL2: Pas 2 de 5: 1
FIL3: Pas 1 de 30: 0
FIL2: Pas 3 de 5: 1
...
...
FIL2: Pas 5 de 5: 3
FIL3: Pas 30 de 30: 832040
FIL4: Pas 40 de 40: 102334155
Crea el programa InterruptCounterThreads, que llance 4 instàncies de
InfiniteCounterThread, un fil que compta des d'un nombre inicial i no deixa mai de
comptar:
Fil 1: compta a partir de l'1 amb un retard d'1 s.
Fil 2: compta a partir del 10 amb un retard de 0,1 s.
Fil 3: compta a partir del 25 amb un retard de 0,4 s.
Fil 4: compta a partir de l'1 amb un retard d'1,3 s.
Cada fil ha de mostrar el missatge següent:
NOM_DEL_FIL: comptador
El programa principal ha de comprovar les condicions següents i interrompre cada fil quan es
complisca la seua:
Fil 1: haja comptat fins al 10.
Fil 2: haja comptat fins al 50.
Fil 3: hagen passat 3 s.
Fil 4: haja comptat 10 nombres després que el primer fil haja acabat.
Consulta com calcular el temps transcorregut en Java.
Crea el programa SumMatrix que sume tots els valors d'una matriu d'enters utilitzant un
fil per sumar cada fila. Els valors de la matriu estan en
data_matrix.csv.
Per llegir els valors d'aquest fitxer pots utilitzar el mètode següent:
publicstaticList<List<Integer>>readMatrixFromCSV(Stringpath){try(BufferedReaderbr=newBufferedReader(newFileReader(path))){returnbr.lines().map(x->Arrays.stream(x.split(",")).mapToInt(Integer::parseInt).boxed().toList()).toList();}catch(Exceptione){System.out.printf("Error reading CSV file: %s\n",path);}returnnull;}publicstaticvoidmain(String[]args){StringCSVPath="files/ud2/data_matrix.csv";List<List<Integer>>matrix=readMatrixFromCSV(CSVPath);// TODOfor(List<Integer>row:matrix){// TODO: Create thread// TODO: Start thread}// TODO: Wait for the threads to finish// TODO: Sum the result of each threadSystem.out.printf("La suma dels valors en \"%s\" és %d\n",CSVPath,result);}
Crea la classe SumIntegerListThread, que reba per paràmetre un List<Integer> i que sume
tots els valors d'aquesta llista en el mètode void run(). Aquesta classe ha de tindre un
atribut int result on es guarde el resultat de la suma.
El programa principal SumMatrix ha de crear un SumIntegerListThread per cada fila de la
matriu i llançar els fils. Quan tots els fils acaben de sumar la seua fila, el fil principal
ha de sumar el resultat de cada fil i mostrar-ne el total.
El programa ManagerTasks simula la realització d'un projecte en el qual es coordinen
diferents equips de desenvolupament. El fil principal crea 3 equips, cadascun liderat per un
ManagerThread. Cada equip té unes persones empleades (EmployeeThread), a les quals s'han
assignat unes tasques.
Implementa els mètodes següents:
Task::work(): defineix com es completa una tasca. Ha d'obtindre el fil actual i fer que
espere tants mil·lisegons com s'han definit en la tasca. A més, ha d'imprimir un missatge
quan comença la tasca i quan acaba:
Pere: Starting task Main page design...
Pere: Finished task Main page design (2500 ms).
EmployeeThread::run(): defineix el comportament de cada persona empleada. Ha de
realitzar totes les tasques que té assignades i, quan les acabe, mostrar el missatge:
Pere: Ha realitzat totes les tasques assignades.
ManagerThread::run(): defineix el comportament de la persona coordinadora de l'equip.
Ha de posar totes les persones empleades de l'equip a realitzar les seues tasques i esperar
que les finalitzen. Quan totes acaben, ha de mostrar el missatge:
FrontendManager: L'equip Frontend ha realitzat totes les tasques.
ManagerTasks::main(): crea els equips i les tasques. Cal completar-lo perquè cada equip
comence a treballar en les tasques assignades. Ha de mostrar el missatge següent quan tots
els equips acaben les seues tasques:
Projecte acabat! Tots els equips han acabat les tasques assignades.
packageud2.exercises.tasks;publicclassManagerTasks{publicstaticvoidmain(String[]args){Teamfrontend=newTeam("Frontend");ManagerThreadfrontendManager=newManagerThread(frontend);EmployeeThreadf1=newEmployeeThread("Pere");f1.addTask("Main page design",2500);f1.addTask("Shopping cart navigation bar",5500);frontend.addEmployee(f1);EmployeeThreadf2=newEmployeeThread("Maria");f2.addTask("Breadcrumb",1500);f2.addTask("Profile page",7500);frontend.addEmployee(f2);Teambackend=newTeam("Backend");ManagerThreadbackendManager=newManagerThread(backend);EmployeeThreadb1=newEmployeeThread("Anna");b1.addTask("Connect API to database",3000);b1.addTask("Shopping API models",4200);backend.addEmployee(b1);EmployeeThreadb2=newEmployeeThread("Arnau");b2.addTask("API authentication",2100);b2.addTask("Testing API",5500);backend.addEmployee(b2);Teamdatabase=newTeam("Database");ManagerThreaddatabaseManager=newManagerThread(database);EmployeeThreadd1=newEmployeeThread("Mireia");d1.addTask("Relation Model",5000);d1.addTask("Define models in the database",4200);database.addEmployee(d1);EmployeeThreadd2=newEmployeeThread("Mar");d2.addTask("Install DBMS",3000);d2.addTask("Views",2800);database.addEmployee(d2);// TODO: Start all the teams and wait for them to finish their tasksSystem.out.println("Projecte acabat! Tots els equips han acabat les tasques assignades.");}}
ManagerThread.java
packageud2.exercises.tasks;publicclassManagerThreadextendsThread{privateTeamteam;publicManagerThread(Teamteam){super();this.team=team;this.setName(String.format("%sManager",team.getName()));}@Overridepublicvoidrun(){// TODO: Make all your assigned employees do their tasksSystem.out.printf("%s: L'equip %s ha realitzat totes les tasques.\n",this.getName(),team.getName());}}
EmployeeThread.java
packageud2.exercises.tasks;importjava.util.ArrayList;importjava.util.List;publicclassEmployeeThreadextendsThread{privateList<Task>tasks;publicEmployeeThread(Stringname){super();this.setName(name);this.tasks=newArrayList<>();}publicvoidaddTask(Tasktask){tasks.add(task);}publicvoidaddTask(StringtaskName,inttaskDuration){tasks.add(newTask(taskName,taskDuration));}publicList<Task>getTasks(){returntasks;}@Overridepublicvoidrun(){// TODO: Do all the assigned tasksSystem.out.printf("%s: Ha realitzat totes les tasques assignades.\n",this.getName());}}