Hakunin

OBP2_V3_Threading1

Nov 10th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.59 KB | None | 0 0
  1.  
  2. public class Aplikacija {
  3.     public static final Object lock=new Object();
  4.  
  5.     public static void main(String[] args) {
  6.  
  7.         Banka banka = new Banka(20000);
  8.  
  9.         Korisnik k1,k2,k3,k4;
  10.         k1=new Korisnik("aaa",16000);
  11.         k2=new Korisnik("bbb",14000);
  12.         k3=new Korisnik("ccc",10000);
  13.         k4=new Korisnik("ddd",11000);
  14.  
  15.         Thread t1,t2,t3,t4,t5;
  16.         t1=new Thread(k1);
  17.         t2=new Thread(k2);
  18.         t3=new Thread(k3);
  19.         t4=new Thread(k4);
  20.         t5=new Thread(banka);
  21.  
  22.         t5.setDaemon(true);
  23.         t5.start();
  24.  
  25.         t1.start();
  26.         t2.start();
  27.         t3.start();
  28.         t4.start();
  29.  
  30.     }
  31. }
  32.  
  33. ///////////////////////////////////////////////
  34.  
  35. public class Banka implements Runnable {
  36.     private static double stanje_banke;
  37.     public static boolean pristupljeno=false;
  38.  
  39.  
  40.     public Banka(double stanje) {
  41.         stanje_banke=stanje;
  42.     }
  43.  
  44.     public Banka() {
  45.     }
  46.  
  47.     public synchronized static void umanji_stanje(double novac){
  48.         pristupljeno=true;
  49.         stanje_banke-=novac;
  50.     }
  51.  
  52.     public static double getStanje_banke() {
  53.         return stanje_banke;
  54.     }
  55.  
  56.     @Override
  57.     public void run() {
  58.         while (true){
  59.             try {
  60.                 stanje_banke+=2000;
  61.                 if(stanje_banke>0){
  62.                     synchronized (Aplikacija.lock){
  63.                         Aplikacija.lock.notify();
  64.                     }
  65.                 }
  66.                 System.out.println("STANJE NA BANKOVNOM RACUNUN JE UVECANO, TRENUTNO STANJE JE: "+stanje_banke);
  67.                 Thread.sleep(5000);
  68.             } catch (InterruptedException e) {
  69.                 e.printStackTrace();
  70.             }
  71.         }
  72.     }
  73. }
  74.  
  75. ////////////////////////////////////////////
  76.  
  77. import java.text.DecimalFormat;
  78. import java.text.NumberFormat;
  79.  
  80. public class Korisnik implements Runnable{
  81.     private String broj_racuna;
  82.     private double stanje_racuna;
  83.  
  84.     public Korisnik(String broj_racuna, double stanje_racuna) {
  85.         this.broj_racuna = broj_racuna;
  86.         this.stanje_racuna = stanje_racuna;
  87.     }
  88.  
  89.     public Korisnik() {
  90.         broj_racuna=null;
  91.         stanje_racuna=0;
  92.     }
  93.  
  94.     @Override
  95.     public void run() {
  96.         NumberFormat formater = new DecimalFormat("#0.00");
  97.         try {
  98.             while (stanje_racuna>0){
  99.                 double rng=Math.random()*500+500;
  100.                 if(stanje_racuna-rng<0){
  101.                     System.out.println("NEMA DOVOLJNO RASPOLOZIVIH SREDSTAVA NA RACUNU: "+broj_racuna+ "("+formater.format(stanje_racuna)+"-"+formater.format(rng)+")");
  102.                     break;
  103.                 }
  104.                 if(Banka.getStanje_banke()<0){
  105.                     System.out.println("BANKA NEMA DOVOLJNO NOVCA DA ISPLATI RACUNU: "+broj_racuna);
  106.                     synchronized (Aplikacija.lock){
  107.                         Aplikacija.lock.wait();
  108.                     }
  109.                 }
  110.                 synchronized (Aplikacija.lock){
  111.                     if(Banka.pristupljeno){
  112.                         Thread.sleep(10);
  113.                     }
  114.                     Banka.pristupljeno=false;
  115.                     Banka.umanji_stanje(rng);
  116.                     stanje_racuna-=rng;
  117.                 }
  118.  
  119.                 System.out.println(formater.format(rng)+" je skinuto sa racuna:  "+broj_racuna+", ostalo je:  "+formater.format(stanje_racuna)+"  a u BANCI:  " +formater.format(Banka.getStanje_banke()));
  120.                 Thread.sleep(1000);
  121.             }
  122.         }catch (InterruptedException e){
  123.             e.printStackTrace();
  124.         }
  125.     }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment