Advertisement
SmaJli

OS Lab 2 Zad 2 Java Threads 2018/2019

Mar 24th, 2019
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.84 KB | None | 0 0
  1. /* import java.util.HashSet;
  2. import java.util.Random;
  3. import java.util.Scanner;
  4. import java.util.concurrent.Semaphore;
  5.  
  6. public class CountThree {
  7.  
  8.     public static int NUM_RUNS = 100;
  9.     /**
  10.      * Promenlivata koja treba da go sodrzi brojot na pojavuvanja na elementot 3
  11.      */
  12.    // int count = 0;
  13.     /**
  14.      * TODO: definirajte gi potrebnite elementi za sinhronizacija
  15.      */
  16.    
  17. /*    public void init() {
  18.     }
  19.  
  20.     class Counter extends Thread {
  21.  
  22.         public void count(int[] data) throws InterruptedException {
  23.            // da se implementira
  24.         }
  25.         private int[] data;
  26.  
  27.         public Counter(int[] data) {
  28.             this.data = data;
  29.         }
  30.  
  31.         @Override
  32.         public void run() {
  33.             try {
  34.                 count(data);
  35.             } catch (Exception e) {
  36.                 e.printStackTrace();
  37.             }
  38.         }
  39.     }
  40.  
  41.     public static void main(String[] args) {
  42.         try {
  43.             CountThree environment = new CountThree();
  44.             environment.start();
  45.         } catch (Exception ex) {
  46.             ex.printStackTrace();
  47.         }
  48.     }
  49.  
  50.     public void start() throws Exception {
  51.  
  52.         init();
  53.  
  54.         HashSet<Thread> threads = new HashSet<Thread>();
  55.         Scanner s = new Scanner(System.in);
  56.         int total=s.nextInt();
  57.        
  58.         for (int i = 0; i < NUM_RUNS; i++) {
  59.             int[] data = new int[total];
  60.             for (int j = 0; j < total; j++) {
  61.                 data[j] = s.nextInt();
  62.             }
  63.             Counter c = new Counter(data);
  64.             threads.add(c);
  65.         }
  66.  
  67.         for (Thread t : threads) {
  68.             t.start();
  69.         }
  70.  
  71.         for (Thread t : threads) {
  72.             t.join();
  73.         }
  74.         System.out.println(count);
  75.  
  76.  
  77.     }
  78. }
  79. */
  80.  
  81. import javax.swing.plaf.basic.BasicTreeUI;
  82. import java.util.HashSet;
  83. import java.util.Random;
  84. import java.util.Scanner;
  85. import java.util.concurrent.Semaphore;
  86.  
  87. public class CountThree{
  88.  
  89.     public static int NUM_RUNS = 100;
  90.     /**
  91.      * Promenlivata koja treba da go sodrzi brojot na pojavuvanja na elementot 3
  92.      */
  93.     int count = 0;
  94.     /**
  95.      * TODO: definirajte gi potrebnite elementi za sinhronizacija
  96.      */
  97.     Semaphore s;
  98.     public void init() {
  99.         s = new Semaphore(1);
  100.     }
  101.  
  102.     class Counter extends Thread {
  103.  
  104.         public void count(int[] data) throws InterruptedException {
  105.             int kolko3 = 0;
  106.             for(int i=0; i<data.length; i++){
  107.                 if(data[i] == 3)kolko3++;
  108.             }
  109.             s.acquire();
  110.             count+=kolko3;
  111.             s.release();
  112.         }
  113.         private int[] data;
  114.  
  115.         public Counter(int[] data) {
  116.             this.data = data;
  117.         }
  118.  
  119.         @Override
  120.         public void run() {
  121.             try {
  122.                 count(data);
  123.             } catch (Exception e) {
  124.                 e.printStackTrace();
  125.             }
  126.         }
  127.     }
  128.  
  129.     public static void main(String[] args) {
  130.         try {
  131.             CountThree environment = new CountThree();
  132.             environment.start();
  133.         } catch (Exception ex) {
  134.             ex.printStackTrace();
  135.         }
  136.     }
  137.  
  138.     public void start() throws Exception {
  139.  
  140.         init();
  141.  
  142.         HashSet<Thread> threads = new HashSet<Thread>();
  143.         Scanner s = new Scanner(System.in);
  144.         int total=s.nextInt();
  145.  
  146.         for (int i = 0; i < NUM_RUNS; i++) {
  147.             int[] data = new int[total];
  148.             for (int j = 0; j < total; j++) {
  149.                 data[j] = s.nextInt();
  150.             }
  151.             Counter c = new Counter(data);
  152.             threads.add(c);
  153.         }
  154.  
  155.         for (Thread t : threads) {
  156.             t.start();
  157.         }
  158.  
  159.         for (Thread t : threads) {
  160.             t.join();
  161.         }
  162.         System.out.println(count);
  163.  
  164.  
  165.     }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement