Advertisement
Guest User

zadanie_3

a guest
Dec 11th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.31 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.*;
  4. import java.util.concurrent.locks.Condition;
  5. import java.util.concurrent.locks.Lock;
  6. import java.util.concurrent.locks.ReentrantLock;
  7.  
  8. public class Main {
  9.     final static Lock m = new ReentrantLock();
  10.     final static Condition c = m.newCondition();
  11.     static boolean stop = false;
  12.     static boolean ideVelke = true;
  13.     static boolean ideMale = false;
  14.     static int pocet = 0;
  15.     static int ROZSAH = 100;
  16.     static int pocetMalych = 0;
  17.     static List<String> zaciatocneSlova = new ArrayList<>();
  18.     static List<String> slova = new ArrayList<>();
  19.  
  20.     public static void main(String[] args) {
  21.         /*
  22.         Nacitanie slov zo vstupu a ich zaradenie do 2 kategorii - zacinajuce na velke pismeno a zvysok
  23.          */
  24.         System.out.println("Napiste rozne slova: ");
  25.         Scanner sc = new Scanner(System.in);
  26.         List<String> text = new ArrayList<>();
  27.         text.addAll(Arrays.asList(sc.nextLine().split("\\s+")));
  28.  
  29.         for (String slovo:text
  30.              ) {
  31.             if (Character.isUpperCase(slovo.charAt(0))) {
  32.                 zaciatocneSlova.add(slovo);
  33.             } else {
  34.                 slova.add(slovo);
  35.             }
  36.         }
  37.  
  38.         /*
  39.         Vytvorenie jednotlivych vlakien
  40.          */
  41.         VkladajVelke vkladajVelke = new VkladajVelke();
  42.         vkladajVelke.start();
  43.  
  44.         VkladajMale vkladajMale = new VkladajMale();
  45.         vkladajMale.start();
  46.  
  47.         UkoncujVety ukoncujVety = new UkoncujVety();
  48.         ukoncujVety.start();
  49.     }
  50.  
  51.     static class VkladajVelke extends Thread {
  52.  
  53.         @Override
  54.         public void run() {
  55.             while (!stop) {
  56.                 m.lock();
  57.                 while (!ideVelke && !stop) {
  58.                     c.signalAll();
  59.                     try {
  60.                         c.await();
  61.                     } catch (InterruptedException e) {
  62.                         e.printStackTrace();
  63.                     }
  64.                 }
  65.                 m.unlock();
  66.  
  67.                 if (pocet == ROZSAH) { stop = true; break; }
  68.                 System.out.print(zaciatocneSlova.get(new Random().nextInt(zaciatocneSlova.size())));
  69.                 pocet++;
  70.  
  71.                 m.lock();
  72.                 ideMale = true;
  73.                 ideVelke = false;
  74.                 m.unlock();
  75.             }
  76.  
  77.             m.lock();
  78.             c.signalAll();
  79.             m.unlock();
  80.         }
  81.     }
  82.  
  83.     static class VkladajMale extends Thread  {
  84.  
  85.         @Override
  86.         public void run() {
  87.             while (!stop) {
  88.                 m.lock();
  89.                 while ((!ideMale || pocetMalych == 4) && !stop) {
  90.                     ideMale = false;
  91.                     c.signalAll();
  92.                     try {
  93.                         c.await();
  94.                     } catch (InterruptedException e) {
  95.                         e.printStackTrace();
  96.                     }
  97.                 }
  98.                 m.unlock();
  99.  
  100.                 if (pocet == ROZSAH) { stop = true; break; }
  101.                 System.out.print(" " + slova.get(new Random().nextInt(slova.size())));
  102.                 pocet++;
  103.  
  104.                 m.lock();
  105.                 pocetMalych++;
  106.                 m.unlock();
  107.  
  108.                 try {
  109.                     Thread.sleep(1000);
  110.                 } catch (InterruptedException e) {
  111.                     e.printStackTrace();
  112.                 }
  113.             }
  114.  
  115.             m.lock();
  116.             c.signalAll();
  117.             m.unlock();
  118.         }
  119.     }
  120.  
  121.     static class UkoncujVety extends Thread  {
  122.  
  123.         @Override
  124.         public void run() {
  125.             while (!stop) {
  126.                 m.lock();
  127.                 while ((ideVelke || ideMale) && !stop) {
  128.                     c.signalAll();
  129.                     try {
  130.                         c.await();
  131.                     } catch (InterruptedException e) {
  132.                         e.printStackTrace();
  133.                     }
  134.                 }
  135.                 m.unlock();
  136.  
  137.                 if (stop) { break; }
  138.                 System.out.print(".\n");
  139.  
  140.                 m.lock();
  141.                 ideVelke = true;
  142.                 ideMale = false;
  143.                 pocetMalych = 0;
  144.                 m.unlock();
  145.             }
  146.  
  147.             m.lock();
  148.             c.signalAll();
  149.             m.unlock();
  150.         }
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement