Advertisement
theSwamz

inter-thread-attempt1

Jul 17th, 2021
1,463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 4.29 KB | None | 0 0
  1. package exercise4;
  2.  
  3. import org.apache.commons.lang3.RandomStringUtils;
  4.  
  5. import java.util.Iterator;
  6. import java.util.Objects;
  7. import java.util.concurrent.ConcurrentHashMap;
  8. import java.util.concurrent.ConcurrentLinkedQueue;
  9. import java.util.function.Consumer;
  10.  
  11. public class BannerBoard {
  12.  
  13.     ConcurrentHashMap<Long, ConcurrentLinkedQueue<String>> messages = new ConcurrentHashMap<>();
  14.  
  15.     public void introduceThreads (Thread[] threads){
  16.         for(Thread thread : threads){
  17.             messages.put(thread.getId(), new ConcurrentLinkedQueue<>());
  18.         }
  19.     }
  20.  
  21.     public void sendMessage(String msg){
  22.         long id = Thread.currentThread().getId();
  23.         if(messages.containsKey(id)){
  24.             messages.forEach((i,list)->{
  25.                 // we do not want the same thread sending itself messages...hence this part
  26.                 if(!i.equals(id)){
  27.                     list.add(msg);
  28.                 }
  29.             });
  30.         }
  31.     }
  32.  
  33.     public void consumeIfAnyMessage(Consumer<String> reader){
  34.         Long id = Thread.currentThread().getId();
  35.         if(messages.containsKey(id)){
  36.             messages.get(id).stream().filter(Objects::nonNull).forEach(reader);
  37.         }
  38.     }
  39.  
  40.     public void readIfAny(){
  41.         Long id = Thread.currentThread().getId();
  42.         if(messages.containsKey(id)){
  43. //            String[] msgs = (String[]) messages.get(id).toArray();
  44.             Object[] arr = messages.get(id).toArray();
  45.             String threadName = Thread.currentThread().getName();
  46.             int threadNum = Character.getNumericValue(threadName.charAt(threadName.length()-1));
  47.  
  48.  
  49.  
  50.             for(Object array : arr){
  51.                 System.out.println("Thread-"+threadNum+" received message "+ arr);
  52.             }
  53.  
  54.         }
  55.     }
  56.  
  57.     public static String generateRandomAlpha(){
  58.         int charCount = 10;
  59.         String alphaNum = RandomStringUtils.randomAlphanumeric(charCount);
  60.         return alphaNum;
  61.     }
  62.  
  63.     public static void main(String[] args){
  64.         BannerBoard bb = new BannerBoard();
  65.  
  66.         Thread t1 = new Thread(new Runnable() {
  67.             @Override
  68.             public void run() {
  69. //                while (true){
  70.                 String msg = generateRandomAlpha();
  71.                 String threadName = Thread.currentThread().getName();
  72.                 int threadId = Character.getNumericValue(threadName.charAt(threadName.length()-1));
  73.                 System.out.println("Thread-"+threadId + " sending message "+ msg+ " to all other threads.");
  74.                     bb.sendMessage(msg);
  75.                     System.out.println("Thread-"+threadId+" received message ");
  76.                     bb.consumeIfAnyMessage(System.out::println);
  77. //                }
  78.             }
  79.         });
  80.  
  81.         Thread t2 = new Thread(new Runnable() {
  82.             @Override
  83.             public void run() {
  84. //                while(true){
  85.                 String msg = generateRandomAlpha();
  86.                 String threadName = Thread.currentThread().getName();
  87.                 int threadId = Character.getNumericValue(threadName.charAt(threadName.length()-1));
  88.                 System.out.println("Thread-"+threadId + " sending message "+ msg+ " to all other threads.");
  89.                 bb.sendMessage(msg);
  90.                 System.out.println("Thread-"+threadId+" received message ");
  91.                 bb.consumeIfAnyMessage(System.out::println);
  92.                 bb.readIfAny();
  93. //                }
  94.             }
  95.         });
  96.  
  97.         Thread t3 = new Thread(new Runnable() {
  98.             @Override
  99.             public void run() {
  100. //                while(true){
  101.                 String msg = generateRandomAlpha();
  102.                 String threadName = Thread.currentThread().getName();
  103.                 int threadId = Character.getNumericValue(threadName.charAt(threadName.length()-1));
  104.                 System.out.println("Thread-"+threadId + " sending message "+ msg+ " to all other threads.");
  105.                 bb.sendMessage(msg);
  106.                 System.out.println("Thread-"+threadId+" received message ");
  107.                 bb.consumeIfAnyMessage(System.out::println);
  108. //                }
  109.             }
  110.         });
  111.  
  112.         Thread[] threads = {t1,t2, t3};
  113.         bb.introduceThreads(threads);
  114.         t1.start();
  115.         t2.start();
  116.         t3.start();
  117.     }
  118. }
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement