From ae127b3240e701eec96da97d7d18ba4f59e7f235 Mon Sep 17 00:00:00 2001 From: "Claudio Maggioni (maggicl)" Date: Mon, 21 Oct 2019 01:05:19 +0200 Subject: [PATCH] Done Ex5 but untestes --- hw1/Ex5/pom.xml | 36 +++++++++++++++++++ .../reentrantrwlock/CreatorSimulation.java | 0 .../{ => main/java}/reentrantrwlock/Main.java | 5 +-- .../java}/reentrantrwlock/Movie.java | 0 .../java}/reentrantrwlock/MovieCatalog.java | 36 +++++++++++++++---- .../reentrantrwlock/PublisherSimulation.java | 0 .../reentrantrwlock/ReaderSimulation.java | 0 .../reentrantrwlock/WatcherSimulation.java | 0 8 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 hw1/Ex5/pom.xml rename hw1/Ex5/src/{ => main/java}/reentrantrwlock/CreatorSimulation.java (100%) rename hw1/Ex5/src/{ => main/java}/reentrantrwlock/Main.java (95%) rename hw1/Ex5/src/{ => main/java}/reentrantrwlock/Movie.java (100%) rename hw1/Ex5/src/{ => main/java}/reentrantrwlock/MovieCatalog.java (66%) rename hw1/Ex5/src/{ => main/java}/reentrantrwlock/PublisherSimulation.java (100%) rename hw1/Ex5/src/{ => main/java}/reentrantrwlock/ReaderSimulation.java (100%) rename hw1/Ex5/src/{ => main/java}/reentrantrwlock/WatcherSimulation.java (100%) diff --git a/hw1/Ex5/pom.xml b/hw1/Ex5/pom.xml new file mode 100644 index 0000000..afb6d4a --- /dev/null +++ b/hw1/Ex5/pom.xml @@ -0,0 +1,36 @@ + + +4.0.0 + +ch.usi.inf.pf3.hw1 +ex5 +1.0-SNAPSHOT +jar + + + ${artifactId} + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-jar-plugin + + + + reentrantrwlock.Main + + + + + + + diff --git a/hw1/Ex5/src/reentrantrwlock/CreatorSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/CreatorSimulation.java similarity index 100% rename from hw1/Ex5/src/reentrantrwlock/CreatorSimulation.java rename to hw1/Ex5/src/main/java/reentrantrwlock/CreatorSimulation.java diff --git a/hw1/Ex5/src/reentrantrwlock/Main.java b/hw1/Ex5/src/main/java/reentrantrwlock/Main.java similarity index 95% rename from hw1/Ex5/src/reentrantrwlock/Main.java rename to hw1/Ex5/src/main/java/reentrantrwlock/Main.java index 4939841..585b61a 100644 --- a/hw1/Ex5/src/reentrantrwlock/Main.java +++ b/hw1/Ex5/src/main/java/reentrantrwlock/Main.java @@ -5,7 +5,7 @@ import java.util.Random; import java.util.ArrayList; public class Main { - // Initial number of movies in the catalog + // Initial number of movies in the catalog private static final int INITIAL_SIZE = 500; // Maximum duration of a movie in the catalog private static final int MAX_DURATION = 3000; @@ -21,7 +21,7 @@ public class Main { MovieCatalog myCatalog = new MovieCatalog(); // Populating the catalog with a initial set of movies List movies = new ArrayList<>(INITIAL_SIZE); - Random generator = new Random(); + Random generator = new Random(); for (int i = 0; i < INITIAL_SIZE; i++) { movies.add( new Movie("Movie" + i, generator.nextInt(MAX_DURATION))); @@ -31,6 +31,7 @@ public class Main { creator.start(); creator.join(); System.out.println("The movie catalog has been created."); + // Starting the threads simulating the movie watchers for (int i = 0; i < NUM_WATCHERS; i++) { new Thread(new WatcherSimulation(myCatalog), "Watcher" + i).start(); diff --git a/hw1/Ex5/src/reentrantrwlock/Movie.java b/hw1/Ex5/src/main/java/reentrantrwlock/Movie.java similarity index 100% rename from hw1/Ex5/src/reentrantrwlock/Movie.java rename to hw1/Ex5/src/main/java/reentrantrwlock/Movie.java diff --git a/hw1/Ex5/src/reentrantrwlock/MovieCatalog.java b/hw1/Ex5/src/main/java/reentrantrwlock/MovieCatalog.java similarity index 66% rename from hw1/Ex5/src/reentrantrwlock/MovieCatalog.java rename to hw1/Ex5/src/main/java/reentrantrwlock/MovieCatalog.java index 60eb234..52fd513 100644 --- a/hw1/Ex5/src/reentrantrwlock/MovieCatalog.java +++ b/hw1/Ex5/src/main/java/reentrantrwlock/MovieCatalog.java @@ -7,6 +7,7 @@ import java.util.TreeMap; import java.util.ArrayList; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.Iterator; public class MovieCatalog { @@ -27,7 +28,11 @@ public class MovieCatalog { * @return the size of this catalog */ public int getSize() { - // TODO: Implement method getSize + int length; + rLock.lock(); + length = movies.size(); + rLock.unlock(); + return length; } /** @@ -37,15 +42,23 @@ public class MovieCatalog { * null if the movie is not in the catalog */ public Movie getMovie(String title) { - //TODO: Implement method getMovie + Movie m; + rLock.lock(); + m = movies.get(title); + rLock.unlock(); + return m; } /** * Returns the list of all movie titles in this catalog - * @return a list of the movie titles in this catalog + * @return a list of the movie titles in this catalog */ public List getTitles() { - //TODO: Implement method getTitles + List titles; + rLock.lock(); + titles = new ArrayList<>(movies.keySet()); + rLock.unlock(); + return titles; } /** @@ -53,7 +66,16 @@ public class MovieCatalog { * @return a randomly selected movie from this catalog */ public Movie getRandomMovie() { - // TODO: Implement method getRandomMovie + Movie m; + rLock.lock(); + final int r = generator.nextInt(movies.size()) - 1; + final Iterator it = movies.values().iterator(); + for (int i = 0; i < r; i++) { + it.next(); + } + m = it.next(); + rLock.unlock(); + return m; } /** @@ -61,6 +83,8 @@ public class MovieCatalog { * @param the movie to be added to the catalog */ public void addMovie(Movie movie) { - //TODO: Implement method addMovie + wLock.lock(); + movies.put(movie.getTitle(), movie); + wLock.unlock(); } } diff --git a/hw1/Ex5/src/reentrantrwlock/PublisherSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/PublisherSimulation.java similarity index 100% rename from hw1/Ex5/src/reentrantrwlock/PublisherSimulation.java rename to hw1/Ex5/src/main/java/reentrantrwlock/PublisherSimulation.java diff --git a/hw1/Ex5/src/reentrantrwlock/ReaderSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/ReaderSimulation.java similarity index 100% rename from hw1/Ex5/src/reentrantrwlock/ReaderSimulation.java rename to hw1/Ex5/src/main/java/reentrantrwlock/ReaderSimulation.java diff --git a/hw1/Ex5/src/reentrantrwlock/WatcherSimulation.java b/hw1/Ex5/src/main/java/reentrantrwlock/WatcherSimulation.java similarity index 100% rename from hw1/Ex5/src/reentrantrwlock/WatcherSimulation.java rename to hw1/Ex5/src/main/java/reentrantrwlock/WatcherSimulation.java