Advertisement
Guest User

Untitled

a guest
Dec 6th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.46 KB | None | 0 0
  1. package petikolokvijum;
  2.  
  3. import java.awt.Color;
  4. import java.util.concurrent.Semaphore;
  5. import java.util.concurrent.atomic.AtomicBoolean;
  6. import java.util.concurrent.atomic.AtomicInteger;
  7. import java.util.concurrent.locks.Condition;
  8. import java.util.concurrent.locks.ReentrantLock;
  9.  
  10. import os.simulation.SimulationContainer;
  11. import os.simulation.SimulationContainerLayout;
  12. import os.simulation.SimulationThread;
  13. import os.simulation.gui.SimulationFrame;
  14. import os.simulation.gui.SimulationPanel;
  15. import os.simulation.gui.swing.SwingSimulationPanel;
  16.  
  17. public class Luvr {
  18.    
  19.    
  20.     private class Ekskurzija{
  21.    
  22.         private Semaphore brItalijana = new Semaphore(5);
  23.         private Semaphore brEngleza = new Semaphore(5);
  24.         private Semaphore brFrancuza = new Semaphore(5);
  25.        
  26.         int brEng = 0;
  27.         int brIta = 0;
  28.         int brFran = 0;
  29.        
  30.         private Semaphore mutex = new Semaphore(1);
  31.         private Semaphore mutex2 = new Semaphore(1);
  32.         private Semaphore mutex3 = new Semaphore(1);
  33.        
  34.         private Semaphore muzej = new Semaphore(1);
  35.        
  36.         public void udjiEnglez() throws InterruptedException{
  37.             brEngleza.acquire();
  38.             mutex.acquire();
  39.                 brEng ++;
  40.                 if (brEng == 1){
  41.                     muzej.acquire();
  42.                 }
  43.             mutex.release();
  44.            
  45.                
  46.            
  47.         }
  48.         public  void izadjiEnglez() throws InterruptedException{
  49.             mutex.acquire();
  50.                 brEng --;
  51.                 if(brEng == 0){
  52.                     muzej.release();
  53.                     brEngleza.release(5);
  54.                 }
  55.             mutex.release();
  56.            
  57.            
  58.         }
  59.        
  60.         public void udjiItalijan() throws InterruptedException{
  61.             brItalijana.acquire();
  62.             mutex2.acquire();
  63.                
  64.                 brIta ++;
  65.                 if(brIta == 1){
  66.                     muzej.acquire();
  67.                 }
  68.             mutex2.release();
  69.                
  70.            
  71.         }
  72.         public void izadjiItalijan() throws InterruptedException{
  73.            
  74.             mutex2.acquire();
  75.                 brIta --;
  76.                 if(brIta == 0){
  77.                     muzej.release();
  78.                     brItalijana.release(5);
  79.                 }
  80.             mutex2.release();
  81.                
  82.        
  83.         }
  84.        
  85.         public void udjiFrancuz() throws InterruptedException{
  86.             brFrancuza.acquire();
  87.            
  88.             mutex3.acquire();
  89.            
  90.                 brFran ++;
  91.                     if(brFran == 1){
  92.                         muzej.acquire();
  93.                     }
  94.             mutex3.release();
  95.            
  96.            
  97.         }
  98.         public  void izadjiFrancuz() throws InterruptedException{
  99.            
  100.             mutex3.acquire();
  101.             brFran --;
  102.             if(brFran == 0){
  103.                 muzej.release();
  104.                 brFrancuza.release(5);
  105.             }
  106.             mutex3.release();
  107.            
  108.        
  109.            
  110.         }
  111.     }
  112.    
  113.    
  114.  
  115.     private class Englez extends SimulationThread {
  116.        
  117.         private Ekskurzija e;
  118.         public Englez(int id, Ekskurzija e) {
  119.            
  120.             super(TEXT_ENGLEZ + " " + id, BOJA_ENGLEZ);
  121.             this.e = e;
  122.            
  123.             setContainer(obradjujeEnglez);
  124.         }
  125.        
  126.        
  127.        
  128.  
  129.         @Override
  130.         protected void run() {
  131.             while (!isStopRequested()) {
  132.                 step();
  133.                 waitWhileSuspended();
  134.             }
  135.         }
  136.  
  137.         @Override
  138.         protected void step() {
  139.             try{
  140.            
  141.                 ceka();
  142.            
  143.                 if(isInterrupted()){
  144.                     Thread.interrupted();
  145.                 }
  146.            
  147.                 e.udjiEnglez();
  148.            
  149.                 obilazi();
  150.                 if(isInterrupted()){
  151.                     Thread.interrupted();
  152.                 }
  153.            
  154.                 e.izadjiEnglez();
  155.                 }catch(InterruptedException e)  {
  156.                
  157.             }
  158.             if(Thread.interrupted()){
  159.                 stopGracefully();
  160.             }
  161.         }
  162.  
  163.         private void obilazi() {
  164.             setContainer(pristupMuzej);
  165.             setText(TEXT_OBILAZI);
  166.             work(DUZINA_OBRADE, 2 * DUZINA_OBILASKA);
  167.             setText(TEXT_OBISAO);
  168.             setContainer(obradjujeEnglez);
  169.         }
  170.  
  171.         private void ceka() {
  172.             setContainer(obradjujeEnglez);
  173.             setText(TEXT_OBRADJUJE);
  174.             work(DUZINA_OBRADE, 2 * DUZINA_CEKANJA);
  175.             setText(TEXT_OBRADIO);
  176.            
  177.         }
  178.     }
  179.    
  180.     private class Francuz extends SimulationThread {
  181.         private Ekskurzija e;
  182.         public Francuz(int id, Ekskurzija e) {
  183.            
  184.             super(TEXT_FRANCUZ + " " + id, BOJA_FRANCUZ);
  185.             this.e = e;
  186.             setContainer(obradjujeFrancuz);
  187.         }
  188.        
  189.        
  190.    
  191.  
  192.         @Override
  193.         protected void run() {
  194.             while (!isStopRequested()) {
  195.                 step();
  196.                 waitWhileSuspended();
  197.             }
  198.         }
  199.  
  200.         @Override
  201.         protected void step() {
  202.             try{
  203.                
  204.                 ceka();
  205.            
  206.                 if(isInterrupted()){
  207.                     Thread.interrupted();
  208.                 }
  209.            
  210.                 e.udjiFrancuz();
  211.            
  212.                 obilazi();
  213.                 if(isInterrupted()){
  214.                     Thread.interrupted();
  215.                 }
  216.            
  217.                 e.izadjiFrancuz();
  218.                 }catch(InterruptedException e)  {
  219.                
  220.             }
  221.         }
  222.  
  223.         private void obilazi() {
  224.             setContainer(pristupMuzej);
  225.             setText(TEXT_OBILAZI);
  226.             work(DUZINA_OBRADE, 2 * DUZINA_OBILASKA);
  227.             setText(TEXT_OBISAO);
  228.             setContainer(obradjujeFrancuz);
  229.         }
  230.  
  231.         private void ceka() {
  232.             setContainer(obradjujeFrancuz);
  233.             setText(TEXT_OBRADJUJE);
  234.             work(DUZINA_OBRADE, 2 * DUZINA_CEKANJA);
  235.             setText(TEXT_OBRADIO);
  236.            
  237.         }
  238.     }
  239.  
  240.     private class Italijan extends SimulationThread {
  241.         private Ekskurzija e;
  242.         public Italijan(int id, Ekskurzija e) {
  243.             super(TEXT_ITALIJAN + " " + id, BOJA_ITALIJAN);
  244.             this.e = e;
  245.            
  246.             setContainer(obradjujeItalijan);
  247.         }
  248.        
  249.         @Override
  250.         protected void run() {
  251.             while (!isStopRequested()) {
  252.                 step();
  253.                 waitWhileSuspended();
  254.             }
  255.         }
  256.  
  257.         @Override
  258.         protected void step() {
  259.             try{
  260.                
  261.                 ceka();
  262.            
  263.                 if(isInterrupted()){
  264.                     Thread.interrupted();
  265.                 }
  266.            
  267.                 e.udjiItalijan();
  268.            
  269.                 obilazi();
  270.                 if(isInterrupted()){
  271.                     Thread.interrupted();
  272.                 }
  273.            
  274.                 e.izadjiItalijan();
  275.                 }catch(InterruptedException e)  {
  276.                
  277.             }
  278.         }
  279.  
  280.         private void obilazi() {
  281.             setContainer(pristupMuzej);
  282.             setText(TEXT_OBILAZI);
  283.             work(DUZINA_OBRADE, 2 * DUZINA_OBILASKA);
  284.             setText(TEXT_OBISAO);
  285.             setContainer(obradjujeItalijan);
  286.         }
  287.  
  288.         private void ceka() {
  289.             setContainer(obradjujeItalijan);
  290.             setText(TEXT_OBRADJUJE);
  291.             work(DUZINA_OBRADE, 2 * DUZINA_CEKANJA);
  292.             setText(TEXT_OBRADIO);
  293.            
  294.            
  295.         }
  296.     }
  297.  
  298.     // Parametri simulacije
  299.     public static final int DUZINA_OBILASKA = 100;
  300.     public static final int DUZINA_CEKANJA = 1500;
  301.     public static final int DUZINA_OBRADE  = 7500;
  302.    
  303.     public static final int BROJ_ENGLEZA    = 10;
  304.     public static final int BROJ_FRANCUZA    = 10;
  305.     public static final int BROJ_ITALIJANA    = 10;
  306.  
  307.     // Boje
  308.     public static final Color BOJA_ENGLEZ   = new Color(148, 45, 17);
  309.     public static final Color BOJA_FRANCUZ = new Color(18, 143, 229);
  310.     public static final Color BOJA_ITALIJAN = new Color(243, 45, 56);
  311.    
  312.     public static final Color BOJA_ITALIJANI = null;
  313.     public static final Color BOJA_FRANCUZI = null;
  314.     public static final Color BOJA_ENGLEZI = null;
  315.    
  316.    
  317.     public static final Color BOJA_MUZEJA    = new Color(128, 255, 128);
  318.    
  319.  
  320.     // Stringovi
  321.     public static final String TEXT_ENGLEZ     ="\u0415\u043D\u0433\u043B\u0435\u0437";
  322.     public static final String TEXT_FRANCUZ   ="\u0424\u0440\u0430\u043D\u0446\u0443\u0437";
  323.     public static final String TEXT_ITALIJAN  = "\u0418\u0442\u0430\u043B\u0438\u0458\u0430\u043D";
  324.    
  325.     public static final String TEXT_CEKA      = "\u0447\u0435\u043A\u0430";
  326.    
  327.     public static final String TEXT_OBILAZI      = "\u043E\u0431\u0438\u043B\u0430\u0437\u0438";
  328.     public static final String TEXT_OBISAO    = "\u043E\u0431\u0438\u0430\u043E";
  329.    
  330.     public static final String TEXT_OBRADJUJE = "\u0420\u0430\u0434\u0438";
  331.     public static final String TEXT_OBRADIO   = "\u0427\u0435\u043A\u0430";
  332.    
  333.    
  334.    
  335.     public static final String TEXT_MUZEJ      = "\u041C\u0443\u0437\u0435\u0458";
  336.    
  337.  
  338.     // Glavni program
  339.     public static void main(String[] a) {
  340.         new Luvr();
  341.     }
  342.  
  343.     // Stanja
  344.     private SimulationContainer pristupMuzej = new SimulationContainer(TEXT_MUZEJ, BOJA_MUZEJA, SimulationContainerLayout.BOX);
  345.    
  346.     private SimulationContainer obradjujeEnglez = new SimulationContainer(TEXT_ENGLEZ, BOJA_ENGLEZI, SimulationContainerLayout.BOX);
  347.     private SimulationContainer obradjujeFrancuz = new SimulationContainer(TEXT_FRANCUZ, BOJA_FRANCUZI, SimulationContainerLayout.BOX);
  348.     private SimulationContainer obradjujeItalijan = new SimulationContainer(TEXT_ITALIJAN, BOJA_ITALIJANI, SimulationContainerLayout.BOX);
  349.    
  350.     private SimulationContainer van = new SimulationContainer(SimulationContainerLayout.ROW, obradjujeEnglez, obradjujeItalijan,obradjujeFrancuz);
  351.     private SimulationContainer sve = new SimulationContainer(SimulationContainerLayout.COLUMN, van, pristupMuzej);
  352.  
  353.     public Luvr() {
  354.         Ekskurzija e = new Ekskurzija();
  355.  
  356.         // Create frame
  357.         SimulationPanel panel = new SwingSimulationPanel(sve);
  358.         SimulationFrame frame = SimulationFrame.create("Ekskurzija", panel);
  359.  
  360.         // Create threads
  361.         for (int i = 1; i <= BROJ_ITALIJANA; i++) {
  362.             new Italijan(i,e).start();
  363.         }
  364.         for (int i = 1; i <= BROJ_ENGLEZA; i++) {
  365.             new Englez(i,e).start();
  366.         }
  367.         for (int i = 1; i <= BROJ_FRANCUZA; i++) {
  368.             new Francuz(i,e).start();
  369.         }
  370.        
  371.  
  372.         // Show the frame
  373.         frame.display();
  374.  
  375.     }
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement