added ex H2
This commit is contained in:
		
							
								
								
									
										14
									
								
								src/exercises/ex_h2/Bridge.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/exercises/ex_h2/Bridge.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | package exercises.ex_h2; | ||||||
|  |  | ||||||
|  | public class Bridge { | ||||||
|  |     private Road roadEast = new Road("East"); | ||||||
|  |     private Road roadWest = new Road("West"); | ||||||
|  |  | ||||||
|  |     public Road getRoadEast() { | ||||||
|  |         return roadEast; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Road getRoadWest() { | ||||||
|  |         return roadWest; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										14
									
								
								src/exercises/ex_h2/Road.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/exercises/ex_h2/Road.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | package exercises.ex_h2; | ||||||
|  |  | ||||||
|  | public class Road { | ||||||
|  |     private String position; | ||||||
|  |  | ||||||
|  |     public Road(String position) { | ||||||
|  |         this.position = position; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         return position + " road"; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								src/exercises/ex_h2/TestDeadlockBridge.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/exercises/ex_h2/TestDeadlockBridge.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | package exercises.ex_h2; | ||||||
|  |  | ||||||
|  | public class TestDeadlockBridge { | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         Bridge bridge = new Bridge(); | ||||||
|  |         //(new Thread(new Vehicle("Ferrari", bridge, bridge.getRoadEast()))).start(); | ||||||
|  |         //(new Thread(new Vehicle("BMW", bridge, bridge.getRoadWest()))).start(); | ||||||
|  |         // Version without DeadLock | ||||||
|  |         (new Thread(new VehicleWithoutDeadlock("Ferrari", bridge, bridge.getRoadEast()))).start(); | ||||||
|  |         (new Thread(new VehicleWithoutDeadlock("BMW", bridge, bridge.getRoadWest()))).start(); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								src/exercises/ex_h2/Vehicle.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/exercises/ex_h2/Vehicle.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | package exercises.ex_h2; | ||||||
|  |  | ||||||
|  | public class Vehicle implements Runnable { | ||||||
|  |     String name; | ||||||
|  |     private Bridge bridge; | ||||||
|  |     private Road road; | ||||||
|  |  | ||||||
|  |     public Vehicle(String name, Bridge bridge, Road road) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.bridge = bridge; | ||||||
|  |         this.road = road; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |         // Do the actions to cross the bridge | ||||||
|  |         synchronized (road) { | ||||||
|  |             System.out.println(name + " is entering on the one-way bridge from " + road); | ||||||
|  |             synchronized (road == bridge.getRoadEast() ? | ||||||
|  |                 bridge.getRoadWest(): | ||||||
|  |                 bridge.getRoadEast()) { | ||||||
|  |                 System.out.println(name + " is leaving the one-way bridge"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								src/exercises/ex_h2/VehicleWithoutDeadlock.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/exercises/ex_h2/VehicleWithoutDeadlock.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | package exercises.ex_h2; | ||||||
|  |  | ||||||
|  | public class VehicleWithoutDeadlock implements Runnable { | ||||||
|  |     String name; | ||||||
|  |     private Bridge bridge; | ||||||
|  |     private Road road; | ||||||
|  |  | ||||||
|  |     public VehicleWithoutDeadlock(String name, Bridge bridge, Road road) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.bridge = bridge; | ||||||
|  |         this.road = road; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |         // Do the actions to cross the bridge | ||||||
|  |         synchronized (bridge) { | ||||||
|  |             System.out.println(name + " is entering on the one-way bridge from " + road); | ||||||
|  |             try { | ||||||
|  |                 Thread.sleep(100); | ||||||
|  |             } catch (InterruptedException e) { | ||||||
|  |                 throw new RuntimeException(e); | ||||||
|  |             } | ||||||
|  |             System.out.println(name + " is leaving the one-way bridge"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user