Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.*;
- import java.util.concurrent.locks.Condition;
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- public class Main {
- final static Lock m = new ReentrantLock();
- final static Condition c = m.newCondition();
- static boolean stop = false;
- static boolean ideVelke = true;
- static boolean ideMale = false;
- static int pocet = 0;
- static int ROZSAH = 100;
- static int pocetMalych = 0;
- static List<String> zaciatocneSlova = new ArrayList<>();
- static List<String> slova = new ArrayList<>();
- public static void main(String[] args) {
- /*
- Nacitanie slov zo vstupu a ich zaradenie do 2 kategorii - zacinajuce na velke pismeno a zvysok
- */
- System.out.println("Napiste rozne slova: ");
- Scanner sc = new Scanner(System.in);
- List<String> text = new ArrayList<>();
- text.addAll(Arrays.asList(sc.nextLine().split("\\s+")));
- for (String slovo:text
- ) {
- if (Character.isUpperCase(slovo.charAt(0))) {
- zaciatocneSlova.add(slovo);
- } else {
- slova.add(slovo);
- }
- }
- /*
- Vytvorenie jednotlivych vlakien
- */
- VkladajVelke vkladajVelke = new VkladajVelke();
- vkladajVelke.start();
- VkladajMale vkladajMale = new VkladajMale();
- vkladajMale.start();
- UkoncujVety ukoncujVety = new UkoncujVety();
- ukoncujVety.start();
- }
- static class VkladajVelke extends Thread {
- @Override
- public void run() {
- while (!stop) {
- m.lock();
- while (!ideVelke && !stop) {
- c.signalAll();
- try {
- c.await();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- m.unlock();
- if (pocet == ROZSAH) { stop = true; break; }
- System.out.print(zaciatocneSlova.get(new Random().nextInt(zaciatocneSlova.size())));
- pocet++;
- m.lock();
- ideMale = true;
- ideVelke = false;
- m.unlock();
- }
- m.lock();
- c.signalAll();
- m.unlock();
- }
- }
- static class VkladajMale extends Thread {
- @Override
- public void run() {
- while (!stop) {
- m.lock();
- while ((!ideMale || pocetMalych == 4) && !stop) {
- ideMale = false;
- c.signalAll();
- try {
- c.await();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- m.unlock();
- if (pocet == ROZSAH) { stop = true; break; }
- System.out.print(" " + slova.get(new Random().nextInt(slova.size())));
- pocet++;
- m.lock();
- pocetMalych++;
- m.unlock();
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- m.lock();
- c.signalAll();
- m.unlock();
- }
- }
- static class UkoncujVety extends Thread {
- @Override
- public void run() {
- while (!stop) {
- m.lock();
- while ((ideVelke || ideMale) && !stop) {
- c.signalAll();
- try {
- c.await();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- m.unlock();
- if (stop) { break; }
- System.out.print(".\n");
- m.lock();
- ideVelke = true;
- ideMale = false;
- pocetMalych = 0;
- m.unlock();
- }
- m.lock();
- c.signalAll();
- m.unlock();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement