added ex V
This commit is contained in:
		
							
								
								
									
										20
									
								
								src/exercises/ex_v/Referee.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/exercises/ex_v/Referee.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| package exercises.ex_v; | ||||
|  | ||||
| import java.util.Comparator; | ||||
| import java.util.List; | ||||
|  | ||||
| public class Referee implements Runnable { | ||||
|     private final List<Result> results; | ||||
|  | ||||
|     public Referee(List<Result> results) { | ||||
|         this.results = results; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void run() { | ||||
|         System.out.println("Referee starts to establish ranking..."); | ||||
|         results.sort(Result::compareTo); | ||||
|         System.out.println("PDG Team Ranking:"); | ||||
|         results.forEach(System.out::println); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										28
									
								
								src/exercises/ex_v/Result.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/exercises/ex_v/Result.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| package exercises.ex_v; | ||||
|  | ||||
| public class Result implements Comparable<Result>{ | ||||
|     private final int time; | ||||
|     private final String team; | ||||
|     public Result(String team, int time) { | ||||
|         this.time = time; | ||||
|         this.team = team; | ||||
|     } | ||||
|  | ||||
|     public int getTime() { | ||||
|         return time; | ||||
|     } | ||||
|  | ||||
|     public String getTeam() { | ||||
|         return team; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int compareTo(Result result) { | ||||
|         return this.getTime() - result.getTime(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return getTeam() + " : " + getTime() + "h"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										34
									
								
								src/exercises/ex_v/Team.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/exercises/ex_v/Team.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| package exercises.ex_v; | ||||
|  | ||||
| import exercises.Utils; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.concurrent.BrokenBarrierException; | ||||
| import java.util.concurrent.CyclicBarrier; | ||||
|  | ||||
| public class Team implements Runnable { | ||||
|     private final String name; | ||||
|     private final List<Result> results; | ||||
|     private final CyclicBarrier barrier; | ||||
|  | ||||
|     public Team(int i, List<Result> results, CyclicBarrier barrier) { | ||||
|         this.name = "Team " + i; | ||||
|         this.results = results; | ||||
|         this.barrier = barrier; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void run() { | ||||
|         System.out.println(name + " : Started the race"); | ||||
|         try { | ||||
|             Utils.randomSleep(1000, 5000); | ||||
|         } catch (InterruptedException _) {} | ||||
|  | ||||
|         Result result = new Result(name, (int) (Math.random() * 20 + 1)); | ||||
|         System.out.println(name + " : Finished the race in " + result.getTime() + " hours and is waiting for other teams"); | ||||
|         results.add(result); | ||||
|         try { | ||||
|             barrier.await(); | ||||
|         } catch (InterruptedException | BrokenBarrierException _) {} | ||||
|     } | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/exercises/ex_v/TestingCyclicBarrier_PDG.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/exercises/ex_v/TestingCyclicBarrier_PDG.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package exercises.ex_v; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.concurrent.BrokenBarrierException; | ||||
| import java.util.concurrent.CyclicBarrier; | ||||
|  | ||||
| public class TestingCyclicBarrier_PDG { | ||||
|     private static int NUM_TEAMS = 20; | ||||
|     public static void main(String[] args) { | ||||
|         List<Result> results = Collections.synchronizedList(new ArrayList<>()); | ||||
|         System.out.println("Starting PDG with " + NUM_TEAMS + " teams "); | ||||
|         CyclicBarrier barrier = new CyclicBarrier(NUM_TEAMS, new Referee(results)); | ||||
|  | ||||
|         // Start the team threads and synchronize them. | ||||
|         // Make sure finally to order to order the results and print them | ||||
|         for (int i = 0; i < NUM_TEAMS; i++) { | ||||
|             new Thread(new Team(i, results, barrier)).start(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user