added ex X
This commit is contained in:
		
							
								
								
									
										35
									
								
								src/exercises/ex_x/FamilyMember.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/exercises/ex_x/FamilyMember.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| package exercises.ex_x; | ||||
|  | ||||
| import exercises.Utils; | ||||
|  | ||||
| import java.util.concurrent.Phaser; | ||||
|  | ||||
| public class FamilyMember implements Runnable { | ||||
|     private final String name; | ||||
|     private final Phaser phaser; | ||||
|     private final int numSteps; | ||||
|  | ||||
|     public FamilyMember(String name, Phaser phaser, int numSteps) { | ||||
|         this.name = name; | ||||
|         this.phaser = phaser; | ||||
|         this.numSteps = numSteps; | ||||
|         phaser.register(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void run() { | ||||
|         int step = 0; | ||||
|         while (step < numSteps) { | ||||
|             step = phaser.getPhase() + 1; | ||||
|             try { | ||||
|                 System.out.println(name + ": Step " + step + " started"); | ||||
|                 Utils.randomSleep(1000, 3000); | ||||
|                 phaser.arriveAndAwaitAdvance(); | ||||
|             } catch (InterruptedException e) { | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         phaser.arriveAndDeregister(); | ||||
|         System.out.println(name + " has arrived"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										24
									
								
								src/exercises/ex_x/TestingPhaserFamilyBikeTrip.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/exercises/ex_x/TestingPhaserFamilyBikeTrip.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| package exercises.ex_x; | ||||
|  | ||||
| import java.util.concurrent.Phaser; | ||||
|  | ||||
| public class TestingPhaserFamilyBikeTrip { | ||||
|     public static void main(String[] args) { | ||||
|         String[] family = {"Father", "Mother", "Son", "Daughter_1", "Daughter_2"}; | ||||
|         String[] routes = {"Sierre", "Sion", "Martigny", "St-Maurice", "Aigle", "Vevey"}; | ||||
|         Phaser phaser = new Phaser(); | ||||
|         phaser.register(); | ||||
|  | ||||
|         System.out.println("The family leaves Brig for a bike trip to Vevey"); | ||||
|         for (int i = 0; i < family.length; i++) { | ||||
|             new Thread(new FamilyMember(family[i], phaser, routes.length)).start(); | ||||
|         } | ||||
|  | ||||
|         for (int i = 0; i < routes.length; i++) { | ||||
|             phaser.arriveAndAwaitAdvance(); | ||||
|             System.out.println("All family members arrived to " + routes[i]); | ||||
|         } | ||||
|         phaser.arriveAndDeregister(); | ||||
|         System.out.println("End of the bike trip."); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user