Advertisement
Harvester1971

zad2

Nov 5th, 2024
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.27 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package values;
  7.  
  8. import java.util.concurrent.Semaphore;
  9.  
  10. /**
  11.  *
  12.  * @author Rau7
  13.  */
  14. public class SecondValue {
  15.  
  16.     private static int A = 0;
  17.     private static int B = 0;
  18.     private static int C = 3;
  19.     private static final int SLEEP = 1;
  20.     //declare all necessary semaphores
  21. //    private static final Semaphore NONAME = new Semaphore(1, true);
  22.     private static final Semaphore a1 = new Semaphore(0, true);
  23.     private static final Semaphore a2 = new Semaphore(1, true);
  24.     private static final Semaphore a3 = new Semaphore(0, true);
  25.     private static final Semaphore a4 = new Semaphore(0, true);
  26.  
  27.     public static void main(String[] args) {
  28.         new P2().start();
  29.         new P1().start();
  30.         new P3().start();
  31.         new P4().start();
  32.         //Tutaj suma ma być równa 46
  33.         /*
  34.             Uruchamiam kolejno:
  35.             wątek P2 - startuje jako pierwszy
  36.             wątek P1, P1 - DWUKROTNIE!
  37.             wątek P4 - drukowanie wyniku
  38.        
  39.             zwalniam pozostałe aktywne wątki, żeby nie "wisiały"
  40.          */
  41.     }
  42.  
  43.     private static final class P1 extends Thread {
  44.  
  45.         @Override
  46.         public void run() {
  47.             try {
  48.                 Thread.sleep(SLEEP);
  49.                 for (int i = 0; i < 2; i++) {
  50.                     System.out.println("Thread P1 is running...");
  51.                     a1.acquire();
  52.                     A = 10;
  53.                     B = B + 5;
  54.                     C = C + A;
  55.                     Thread.sleep(SLEEP);
  56.                     System.out.println("Thread P1 is done...");
  57.                     //Pozwalam drugi raz wykonać wątek P1
  58.                     a1.release();
  59.                 }
  60.                 //Wpuszczam wątek drukowania wyniku
  61.                 a4.release();
  62.             } catch (InterruptedException ex) {
  63.                 System.out.println("Ooops...");
  64.                 Thread.currentThread().interrupt();
  65.                 throw new RuntimeException(ex);
  66.             }
  67.         }
  68.     }
  69.  
  70.     private static final class P2 extends Thread {
  71.  
  72.         @Override
  73.         public void run() {
  74.             try {
  75.                 Thread.sleep(SLEEP);
  76.                 a2.acquire();
  77.                 System.out.println("Thread P2 is running...");
  78.                 B = B + C;
  79.                 A = A + B;
  80.                 Thread.sleep(SLEEP);
  81.                 System.out.println("Thread P2 is done...");
  82.                 a1.release(); //Zwalniam wątek P1
  83.             } catch (InterruptedException ex) {
  84.                 System.out.println("Ooops...");
  85.                 Thread.currentThread().interrupt();
  86.                 throw new RuntimeException(ex);
  87.             }
  88.         }
  89.     }
  90.  
  91.     private static final class P3 extends Thread {
  92.  
  93.         @Override
  94.         public void run() {
  95.             try {
  96.                 a3.acquire();
  97.                 Thread.sleep(SLEEP);
  98.                 System.out.println("Thread P3 is running...");
  99.                 C = B + 10;
  100.                 A = 2 * A;
  101.                 B = B + A;
  102.                 Thread.sleep(SLEEP);
  103.                 System.out.println("Thread P3 is done...");
  104.             } catch (InterruptedException ex) {
  105.                 System.out.println("Ooops...");
  106.                 Thread.currentThread().interrupt();
  107.                 throw new RuntimeException(ex);
  108.             }
  109.         }
  110.     }
  111.  
  112.     private static final class P4 extends Thread {
  113.  
  114.         @Override
  115.         public void run() {
  116.             try {
  117.                 a4.acquire();
  118.                 System.out.println("Thread 4 is running");
  119.                 Thread.sleep(SLEEP);
  120.                 System.out.println("Sum result: " + A + " + " + B + " + " + C + " = " + (A + B + C));
  121.                 Thread.sleep(SLEEP);
  122.                 System.out.println("Thread P4 is done...");
  123.                 //Zwalniam "wiszący" wątek P3
  124.                 a3.release();
  125.             } catch (InterruptedException ex) {
  126.                 System.out.println("Ooops...");
  127.                 Thread.currentThread().interrupt();
  128.                 throw new RuntimeException(ex);
  129.             }
  130.         }
  131.     }
  132. }
  133.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement