Crea el programa FibonacciConcurrent que vaja demanant
números enters i naturals (majors de 0) a l'usuari.
El programa deixarà de demanar números a l'usuari quan s'introduïsca un 0.
Advertència
Utilitzar nombre majors de 40 pot resultar en un overflow
de el tipus de dades int.
Si voleu provar amb nombres majors, podeu utilitzar el tipus
de dades long.
Per cada número introduït, el programa llançarà un fil que calcule
els N primers nombres de Successió de Fibonacci
i els mostrarà per pantalla.
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 pot comptar des d'un nombre inicial
i no deixarà mai de comptar.
Fil 1: Compta a partir del 1 en 1s de delay.
Fil 2: Compta a partir del 10 en 0.1s de delay.
Fil 3: Compta a partir del 25 en 0.4s de delay.
Fil 4: Compta a partir del 1 en 1.3s de delay.
Cada fil ha de mostrar el següent missatge:
NOM_DEL_Fil: comptador
El programa principal comprovarà les següents condicions,
i interrompre a cada Thread quan es complisca:
Fil 1: Haja comptat fins al 10.
Fil 2: Haja comptat fins al 50.
Fil 3: Hagen passat 3 segons.
Fil 4: Haja comptat 10 números després que el primer fil haja acabat.
Per llegir els valors d'aquest fitxer podeu utilitzar els següent mètode:
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);}
Heu de crear la classe SumIntegerListThread, que reba per paràmetre
un List<Int> i que sume tots els valors d'aquesta llista en el mètode
void run(). Aquesta classe hauria de tindre un atribut int result
on se guardarà el resultat de la suma de la llista.
El programa principal SumMatrix, ha de crear un SumIntegerListThread
per cada fila de la matriu i llançar els threads.
Quan tots els threads acaben de sumar la seua fila, el fil principal
sumarà el resultat de cada fil i mostrarà el resultat.
El programa ManagerTasks simula la realització d'un
projecte on es coordinen diferents equips de desenvolupament.
El fil principal crea 3 equips, cadascun d'ells liderats
per un ManagerThread. Cada equip té uns empleats EmployeeThread,
als quals se'ls han assignat unes tasques.
S'han d'implementar els següents mètodes:
Task::work(): Aquest mètode defineix com es completa una
tasca. Aquest mètode ha d'obtenir el fil actual i fer que
espere tants mil·lisegons com s'ha definit en la tasca.
Aquest mètode imprimirà un missatge quan comence la tasca i
quan es finalitze:
Pere: Starting task Main page design...
Pere: Finished task Main page design (2500 ms).
EmployeeThread::run(): Aquest mètode defineix el comportament de
cada treballador. Aquest mètode realitzarà totes les tasques
que el treballador té assignades.
Quan acabe totes les tasques, mostrarà el missatge:
Pere: Ha realitzat totes les tasques assignades.
ManagerThread::run(): Aquest mètode defineix el comportament
del coordinador de l'equip. Aquest mètode posarà a tots els
treballador de l'equip a realitzar les seues tasques i esperarà
a que les finalitzen.
Quan tots els treballadors de l'equip acaben les tasques,
mostrarà el missatge:
FrontendManager: L'equip Frontend ha realitzat totes les tasques.
ManagerTasks::main(): Aquest mètode crea els equips i les tasques,
cal acabar-lo perquè cada equip comence a treballar en les tasques
assignades. Mostrarà el següent missatge 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());}}