added ex S3
This commit is contained in:
		
							
								
								
									
										20
									
								
								src/exercises/ex_s3/AbstractTweet.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/exercises/ex_s3/AbstractTweet.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | package exercises.ex_s3; | ||||||
|  |  | ||||||
|  | public abstract class AbstractTweet { | ||||||
|  |     private String author; | ||||||
|  |     private String content; | ||||||
|  |  | ||||||
|  |     public AbstractTweet(String author, String content) { | ||||||
|  |         this.author = author; | ||||||
|  |         this.content = content; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public abstract void addLike(); | ||||||
|  |     public abstract void removeLike(); | ||||||
|  |     public abstract long getLikes(); | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         return "@" + author + " tweeted \"" + content + "\" (" + getLikes() + " likes)"; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										27
									
								
								src/exercises/ex_s3/AtomicTweet.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/exercises/ex_s3/AtomicTweet.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | package exercises.ex_s3; | ||||||
|  |  | ||||||
|  | import java.util.concurrent.atomic.AtomicLong; | ||||||
|  |  | ||||||
|  | public class AtomicTweet extends AbstractTweet { | ||||||
|  |  | ||||||
|  |     private AtomicLong likes = new AtomicLong(0); | ||||||
|  |  | ||||||
|  |     public AtomicTweet(String author, String content) { | ||||||
|  |         super(author, content); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void addLike() { | ||||||
|  |         likes.incrementAndGet(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void removeLike() { | ||||||
|  |         likes.updateAndGet(i -> i > 0 ? i - 1 : i); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public long getLikes() { | ||||||
|  |         return likes.get(); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								src/exercises/ex_s3/TestingAtomicLong.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/exercises/ex_s3/TestingAtomicLong.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | package exercises.ex_s3; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class TestingAtomicLong { | ||||||
|  |     public static String[] names = { | ||||||
|  |         "Alice", "Bob", "Charlie", "Derek", "Emily", | ||||||
|  |         "Fionna", "Greg", "Harry", "Isabella", "Julia" | ||||||
|  |     }; | ||||||
|  |     public static void main(String[] args) throws InterruptedException { | ||||||
|  |         List<AbstractTweet> tweets = new ArrayList<>(); | ||||||
|  |         AbstractTweet tweet1 = new Tweet("Alice", "Java is cool !"); | ||||||
|  |         AbstractTweet tweet2 = new AtomicTweet("Bob", "ISC is the best !"); | ||||||
|  |         tweets.add(tweet1); | ||||||
|  |         tweets.add(tweet2); | ||||||
|  |  | ||||||
|  |         Thread[] users = new Thread[10]; | ||||||
|  |  | ||||||
|  |         for (int i = 0; i < 10; i++) { | ||||||
|  |             users[i] = new Thread(new User(names[i], tweets)); | ||||||
|  |             users[i].start(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         for (int i = 0; i < 10; i++) { | ||||||
|  |             users[i].join(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         System.out.println(tweet1); | ||||||
|  |         System.out.println(tweet2); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								src/exercises/ex_s3/Tweet.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/exercises/ex_s3/Tweet.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | package exercises.ex_s3; | ||||||
|  |  | ||||||
|  | public class Tweet extends AbstractTweet { | ||||||
|  |     private long likes = 0; | ||||||
|  |  | ||||||
|  |     public Tweet(String author, String content) { | ||||||
|  |         super(author, content); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void addLike() { | ||||||
|  |         likes += 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void removeLike() { | ||||||
|  |         likes -= 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public long getLikes() { | ||||||
|  |         return likes; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								src/exercises/ex_s3/User.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/exercises/ex_s3/User.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | package exercises.ex_s3; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class User implements Runnable { | ||||||
|  |     private final String name; | ||||||
|  |     private final List<AbstractTweet> tweets; | ||||||
|  |  | ||||||
|  |     public User(String name, List<AbstractTweet> tweets) { | ||||||
|  |         this.name = name; | ||||||
|  |         this.tweets = tweets; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void run() { | ||||||
|  |         for (int i = 0; i < 100000; i++) { | ||||||
|  |             if (i % 10 == 9) { | ||||||
|  |                 tweets.forEach(AbstractTweet::removeLike); | ||||||
|  |             } else { | ||||||
|  |                 tweets.forEach(AbstractTweet::addLike); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user