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