Advertisement
Guest User

Enunciado Semáforos

a guest
Mar 27th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.16 KB | None | 0 0
  1. 4 pessoas caminham, cada uma em um corredor. Os 4 corredores saem em uma porta. Apenas 1 pode cruzar a porta por vez. Considere que cada corredor tem 200 m e cada pessoa anda de 4 a 6 m/s. Cada pessoa leva de 1 a 2 segundos p/ abrir a porta e cruzá-la. Faça uma aplicação java que simule essa situação.
  2.  
  3. //Classe ThreadPessoa.java:
  4.  
  5. package controller;
  6.  
  7. import java.util.concurrent.Semaphore;
  8.  
  9. public class ThreadPessoa extends Thread {
  10.    
  11.     private int idThread;
  12.     private Semaphore semaforo;
  13.     private static final int DISTANCIA = 200;
  14.    
  15.     public ThreadPessoa (int idThread, Semaphore semaforo) {
  16.         this.idThread = idThread;
  17.         this.semaforo = semaforo;
  18.     }
  19.    
  20.     private void pessoaAndando() {
  21.         int distanciaPercorrida = 0;
  22.         while (distanciaPercorrida < DISTANCIA) {
  23.             int rodada = (int) ((Math.random() * 6) + 4);
  24.             distanciaPercorrida += rodada;
  25.             System.out.println("A pessoa #"+idThread+" já percorreu "+distanciaPercorrida+" metros");
  26.             try {
  27.                 Thread.sleep(1000);
  28.             } catch (InterruptedException e) {
  29.                 e.printStackTrace();
  30.             }
  31.         }
  32.     }
  33.    
  34.     private void pessoaChegou() {
  35.         System.out.println("A pessoa #"+idThread+" chegou");
  36.     }
  37.    
  38.     private void pessoaPassa() {
  39.         System.out.println("A pessoa #"+idThread+" está atravessando o portal (a.k.a porta)");
  40.         int tempo = (int) ((Math.random() * 2000) + 1000);
  41.         try {
  42.             Thread.sleep(tempo);
  43.         } catch (InterruptedException e) {
  44.             e.printStackTrace();
  45.         }
  46.     }
  47.    
  48.     private void pessoaPassou() {
  49.         System.out.println("A pessoa #"+idThread+" passou pelo portal (a.k.a porta)");
  50.     }
  51.    
  52.     public void run() {
  53.         pessoaAndando();
  54.         pessoaChegou();
  55.         try {
  56.             semaforo.acquire();
  57.             pessoaPassa();
  58.             pessoaPassou();
  59.         } catch (InterruptedException e) {
  60.             e.printStackTrace();
  61.         } finally {
  62.             semaforo.release();
  63.         }
  64.     }
  65. }
  66.  
  67.  
  68. //Classe MainPessoa.java
  69.  
  70. package view;
  71.  
  72. import java.util.concurrent.Semaphore;
  73.  
  74. import controller.ThreadPessoa;
  75.  
  76. public class MainPessoa {
  77.  
  78.     public static void main(String[] args) {
  79.         int permissoes = 1;
  80.         Semaphore semaforo = new Semaphore(permissoes);
  81.         for (int i = 0; i < 4; i++) {
  82.             Thread t = new ThreadPessoa(i, semaforo);
  83.             t.start();
  84.         }
  85.     }
  86.  
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement