started ex Z4
This commit is contained in:
		
							
								
								
									
										124
									
								
								.idea/uiDesigner.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								.idea/uiDesigner.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="Palette2"> | ||||||
|  |     <group name="Swing"> | ||||||
|  |       <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> | ||||||
|  |         <initial-values> | ||||||
|  |           <property name="text" value="Button" /> | ||||||
|  |         </initial-values> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> | ||||||
|  |         <initial-values> | ||||||
|  |           <property name="text" value="RadioButton" /> | ||||||
|  |         </initial-values> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> | ||||||
|  |         <initial-values> | ||||||
|  |           <property name="text" value="CheckBox" /> | ||||||
|  |         </initial-values> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> | ||||||
|  |         <initial-values> | ||||||
|  |           <property name="text" value="Label" /> | ||||||
|  |         </initial-values> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||||
|  |           <preferred-size width="150" height="-1" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||||
|  |           <preferred-size width="150" height="-1" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||||
|  |           <preferred-size width="150" height="-1" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="150" height="50" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="150" height="50" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="150" height="50" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="150" height="50" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="150" height="50" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="150" height="50" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="200" height="200" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> | ||||||
|  |           <preferred-size width="200" height="200" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> | ||||||
|  |           <preferred-size width="-1" height="20" /> | ||||||
|  |         </default-constraints> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> | ||||||
|  |       </item> | ||||||
|  |       <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||||
|  |         <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> | ||||||
|  |       </item> | ||||||
|  |     </group> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
							
								
								
									
										17
									
								
								src/exercises/ex_k_bis1/Customer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/exercises/ex_k_bis1/Customer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | package exercises.ex_k_bis1; | ||||||
|  |  | ||||||
|  | public class Customer implements Runnable { | ||||||
|  |     /*private String name; | ||||||
|  |     private ServiceDesk serviceDesk; | ||||||
|  |  | ||||||
|  |     public Customer(String name, ServiceDesk serviceDesk) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.serviceDesk = serviceDesk; | ||||||
|  |     } | ||||||
|  |     */ | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |  | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								src/exercises/ex_k_bis1/TestServiceDesk.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/exercises/ex_k_bis1/TestServiceDesk.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | package exercises.ex_k_bis1; | ||||||
|  |  | ||||||
|  | public class TestServiceDesk { | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         /* | ||||||
|  |         ServiceDesk serviceDesk = new ServiceDesk(2); | ||||||
|  |         for (int j = 0; j<3; j++) { | ||||||
|  |             new Thread(new ServiceRepresentative(serviceDesk), "Employee-"+ j).start(); | ||||||
|  |         } | ||||||
|  |         // Start customer threads | ||||||
|  |         for (int i = 0; i < 10; i++) { // 30 customers | ||||||
|  |             String name = "Customer-" + i; | ||||||
|  |             new Thread(new Customer(name, serviceDesk)).start(); | ||||||
|  |             try { | ||||||
|  |                 Thread.sleep((int) (Math.random() * 1000)); // Random arrival | ||||||
|  |             } catch (InterruptedException e) { | ||||||
|  |                 Thread.currentThread().interrupt(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         */ | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										75
									
								
								src/exercises/ex_n_bis/LibraryCatalog.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/exercises/ex_n_bis/LibraryCatalog.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | package exercises.ex_n_bis; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.concurrent.locks.Lock; | ||||||
|  | import java.util.concurrent.locks.ReentrantReadWriteLock; | ||||||
|  |  | ||||||
|  | public class LibraryCatalog { | ||||||
|  |     private final Map<String, String> catalog = new HashMap<>(); | ||||||
|  |     private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); | ||||||
|  |     private final Lock readLock = lock.readLock(); | ||||||
|  |     private final Lock writeLock = lock.writeLock(); | ||||||
|  |  | ||||||
|  |     public LibraryCatalog() { | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public ArrayList<Book> getBooks() { | ||||||
|  |         ArrayList<Book> books = new ArrayList<>(); | ||||||
|  |         try { | ||||||
|  |             readLock.lock(); | ||||||
|  |             catalog.forEach((title, author) -> { | ||||||
|  |                 books.add(new Book(title, author)); | ||||||
|  |             }); | ||||||
|  |         } finally { | ||||||
|  |             readLock.unlock(); | ||||||
|  |         } | ||||||
|  |         return books; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String findBook(String title) { | ||||||
|  |         String author; | ||||||
|  |         try { | ||||||
|  |             readLock.lock(); | ||||||
|  |             author = catalog.get(title); | ||||||
|  |         } finally { | ||||||
|  |             readLock.unlock(); | ||||||
|  |         } | ||||||
|  |         if (author == null) { | ||||||
|  |             System.out.println("The book '" + title + "' is not in the catalog"); | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         return author; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void addBook(String title, String author) { | ||||||
|  |         try { | ||||||
|  |             writeLock.lock(); | ||||||
|  |             catalog.put(title, author); | ||||||
|  |         } finally { | ||||||
|  |             writeLock.unlock(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void removeBook(String title) { | ||||||
|  |         try { | ||||||
|  |             writeLock.lock(); | ||||||
|  |             catalog.remove(title); | ||||||
|  |         } finally { | ||||||
|  |             writeLock.unlock(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void updateBook(String title, String newAuthor) { | ||||||
|  |         try { | ||||||
|  |             writeLock.lock(); | ||||||
|  |             catalog.replace(title, newAuthor); | ||||||
|  |         } finally { | ||||||
|  |             writeLock.unlock(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public record Book(String title, String author) {} | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								src/exercises/ex_w/Car.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/exercises/ex_w/Car.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | package exercises.ex_w; | ||||||
|  |  | ||||||
|  | public class Car { | ||||||
|  |     private String name; | ||||||
|  |     private String licensePlateNumber; | ||||||
|  |     public Car(String name, String licensePlateNumber) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.licensePlateNumber = licensePlateNumber; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getLicensePlateNumber() { | ||||||
|  |         return licensePlateNumber; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         return name; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								src/exercises/ex_w/Customer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/exercises/ex_w/Customer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | package exercises.ex_w; | ||||||
|  |  | ||||||
|  | public class Customer implements Runnable { | ||||||
|  |     private final String name; | ||||||
|  |     private final String licensePlateNumber; | ||||||
|  |     private Car car; | ||||||
|  |  | ||||||
|  |     public Customer(String name, Car car) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.car = car; | ||||||
|  |         licensePlateNumber = car.getLicensePlateNumber(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |  | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								src/exercises/ex_w/Garage.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/exercises/ex_w/Garage.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | package exercises.ex_w; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.concurrent.Exchanger; | ||||||
|  |  | ||||||
|  | public class Garage implements Runnable { | ||||||
|  |     private List<Car> courtesyCars = new ArrayList<>(); | ||||||
|  |     private Exchanger<Car> receiveExchanger = new Exchanger<>(); | ||||||
|  |  | ||||||
|  |     public Garage() { | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Car leaveForRepair(Car car) throws InterruptedException { | ||||||
|  |         return receiveExchanger.exchange(car); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |         while (true) { | ||||||
|  |             Car courtesyCar = courtesyCars.removeFirst(); | ||||||
|  |             try { | ||||||
|  |                 Car toRepair = receiveExchanger.exchange(courtesyCar); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             } catch (InterruptedException e) { | ||||||
|  |                 throw new RuntimeException(e); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								src/exercises/ex_w/TestingExchanger_Garage.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/exercises/ex_w/TestingExchanger_Garage.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | package exercises.ex_w; | ||||||
|  |  | ||||||
|  | public class TestingExchanger_Garage { | ||||||
|  |     String[] carTypes = {"Seat Alhambra", "BMW Mini", "Tesla 3"}; | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         // Create a Customer thread and a Garage thread | ||||||
|  |         // that use an exchanger for replacing the customer car | ||||||
|  |         // with a courtesy car during the reparation. At the end of the day, | ||||||
|  |         // the cars are exchanged back. | ||||||
|  |         Garage garage = new Garage(); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								src/exercises/ex_z4/AuctionMain.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/exercises/ex_z4/AuctionMain.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | package exercises.ex_z4; | ||||||
|  |  | ||||||
|  | import java.util.Random; | ||||||
|  | import java.util.concurrent.ConcurrentLinkedQueue; | ||||||
|  | import java.util.concurrent.Semaphore; | ||||||
|  |  | ||||||
|  | public class AuctionMain { | ||||||
|  |     public static final String[] names = { | ||||||
|  |         "Sabrina", "José", "Patrick", "Salomé", "Lisa", "Alfred", "Annna", "Alex", "Kevin" | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         Semaphore mutex = new Semaphore(1); | ||||||
|  |         ConcurrentLinkedQueue<Bid> bids = new ConcurrentLinkedQueue<>(); | ||||||
|  |         Auctioneer auctioneer = new Auctioneer("Paul", bids, mutex); | ||||||
|  |  | ||||||
|  |         new Thread(auctioneer).start(); | ||||||
|  |  | ||||||
|  |         for (int i = 0; i < names.length; i++) { | ||||||
|  |             new Thread(new Bidder(names[i])).start(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										81
									
								
								src/exercises/ex_z4/Auctioneer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/exercises/ex_z4/Auctioneer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | |||||||
|  | package exercises.ex_z4; | ||||||
|  |  | ||||||
|  | import java.util.concurrent.ConcurrentLinkedQueue; | ||||||
|  | import java.util.concurrent.Semaphore; | ||||||
|  |  | ||||||
|  | public class Auctioneer implements Runnable { | ||||||
|  |     private String name; | ||||||
|  |     private ConcurrentLinkedQueue<Bid> bids; | ||||||
|  |     private Semaphore mutex; | ||||||
|  |     private Bid maximumBid; | ||||||
|  |     private Thread countdownThread = null; | ||||||
|  |  | ||||||
|  |     public Auctioneer(String name, ConcurrentLinkedQueue<Bid> bids, Semaphore mutex) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.bids = bids; | ||||||
|  |         this.mutex = mutex; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void placeBid(Bid bid) { | ||||||
|  |         bids.add(bid); | ||||||
|  |         notify(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void countdown() { | ||||||
|  |         try { | ||||||
|  |             Thread.sleep(1000); | ||||||
|  |             System.out.println("Three"); | ||||||
|  |             Thread.sleep(1000); | ||||||
|  |             System.out.println("Two"); | ||||||
|  |             Thread.sleep(1000); | ||||||
|  |             System.out.println("One"); | ||||||
|  |             Thread.sleep(1000); | ||||||
|  |             System.out.println("End of the Auction !"); | ||||||
|  |             notify(); | ||||||
|  |         } catch (InterruptedException _) {} | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void startCountdown() { | ||||||
|  |         countdownThread = new Thread(this::countdown); | ||||||
|  |         countdownThread.start(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Bid getMaximumBid() { | ||||||
|  |         return maximumBid; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void endAuction(){ | ||||||
|  |         System.out.println("End of the auction ! "); | ||||||
|  |         notifyAll(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |         while (true) { | ||||||
|  |             try { | ||||||
|  |                 mutex.acquire(); | ||||||
|  |                 Bid current_bid = bids.poll(); | ||||||
|  |                 if (current_bid == null) { | ||||||
|  |                     startCountdown(); | ||||||
|  |                     wait(); | ||||||
|  |                     if (bids.isEmpty()) { | ||||||
|  |                         endAuction(); | ||||||
|  |                     } | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |                 if (!bids.isEmpty()) { | ||||||
|  |                     if (current_bid.amount() > maximumBid.amount()) { | ||||||
|  |                         maximumBid = current_bid; | ||||||
|  |                         System.out.println("New bid : " + maximumBid.amount() + " by " + maximumBid.bidder()); | ||||||
|  |                         mutex.release(); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |                 } else { | ||||||
|  |                     mutex.release(); | ||||||
|  |                 } | ||||||
|  |             } catch (InterruptedException e) { | ||||||
|  |                 throw new RuntimeException(e); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								src/exercises/ex_z4/Bid.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/exercises/ex_z4/Bid.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | package exercises.ex_z4; | ||||||
|  |  | ||||||
|  | public record Bid(Bidder bidder, double amount) { | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										44
									
								
								src/exercises/ex_z4/Bidder.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/exercises/ex_z4/Bidder.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | package exercises.ex_z4; | ||||||
|  |  | ||||||
|  | import java.util.Random; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class Bidder implements Runnable { | ||||||
|  |     private static int nextId = 0; | ||||||
|  |     private final String name; | ||||||
|  |     private final int id; | ||||||
|  |     private final List<Item> items = new ArrayList<>(); | ||||||
|  |     private Double lastBid = null; | ||||||
|  |  | ||||||
|  |     public Bidder(String name) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.id = nextId++; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |         while(true){ | ||||||
|  |             Random rand = new Random(); | ||||||
|  |             double addon = rand.nextDouble(500); | ||||||
|  |             lastBid += addon; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getName() { | ||||||
|  |         return name; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getId() { | ||||||
|  |         return id; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Double getLastBid() { | ||||||
|  |         return lastBid; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         return "(" + id + ") " + name; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								src/exercises/ex_z4/Item.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/exercises/ex_z4/Item.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | package exercises.ex_z4; | ||||||
|  |  | ||||||
|  | public record Item(String name) { | ||||||
|  |  | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user