Programación de aeropuerto con hilos en Java

DESCARGAR




public class Avion implements Runnable
{
private int numeroAvion;
private Torre oTorre= new Torre();
int aleatorioHang = Main.aleatorio .nextInt(12)+12;
int aleatorioHangar = aleatorioHang*60;
int aleatorioVol = Main.aleatorio .nextInt(2)+1;
int aleatorioVolando = aleatorioVol*60;
boolean hayPista=true;
int numeroPista;

public Avion(int i, Torre torre)
{
numeroAvion = i;
oTorre = torre;
}

public  void run()
{
try {
//Thread.sleep(10);
while(!Thread.interrupted())
{
accionAvion();
//Thread.sleep(10);
}
} catch (InterruptedException e) {
// System.out.println("AVION "+numeroAvion+" TERNIMADO" );

System.out.println("Avion "+numeroAvion+" terminado." );
return;
}
}

private void accionAvion() throws InterruptedException

{
// System.out.println("Empiezo las acciones de Avion");
// System.out.println("Avion numero: "+ numeroAvion+ " permanece en el hangar");
System.out.println("Avión "+numeroAvion+" en el hangar.");
Thread.sleep(aleatorioHangar);
System.out.println("Avión número "+numeroAvion+" desea despegar.");
// System.out.println("Avion numero: "+numeroAvion+ " ha estado "+ aleatorioHang + " horas en el hangar print Ana");
//ocupa la pista
numeroPista= oTorre.obtenerPista();
// System.out.println("Avion numero: "+ numeroAvion+ " OCUPA la pista "+numeroPista );
if(numeroPista==1){
System.out.println("Avión número "+numeroAvion+" despegando en pista V.");;
}else {
System.out.println("Avión número "+numeroAvion+" despegando en pista W.");
}
//if (hayPista==true)
//{
// System.out.println("Avion numero: "+ numeroAvion+ " quiere despegar");
// System.out.println("Avion numero: "+ numeroAvion+ " despega de la pista "+numeroPista);
Thread.sleep(10);
System.out.println("Avión "+numeroAvion+" ya despegó.");
//}
//deja la pista
oTorre.dejarPistaLibre(numeroPista);
// System.out.println("Avion numero: "+ numeroAvion+ " DEJA libre la pista "+ numeroPista);
System.out.println("Avión "+numeroAvion+" en reconocimiento.");

// System.out.println("Avion numero: "+ numeroAvion+ " despego ");
// System.out.println("Avion numero: "+ numeroAvion+ " esta volando");
Thread.sleep(aleatorioVolando);
System.out.println("Avión "+numeroAvion+" desea aterrizar.");

// System.out.println("Avion numero: "+numeroAvion+ " ha estado "+ aleatorioVol+ " horas volando");

//ocupa la pista
numeroPista=oTorre.obtenerPista();
// System.out.println("Avion numero: "+ numeroAvion+ " OCUPA la pista "+numeroPista);
if(numeroPista==1){
// System.out.println("Avión número "+numeroAvion+" puede aterrizar en pista V.");
System.out.println("Avión número "+numeroAvion+" aterrizando en pista V.");
}else {
// System.out.println("Avión número "+numeroAvion+" puede aterrizar en pista W.");
System.out.println("Avión número "+numeroAvion+" aterrizando en pista W.");
}
//if (hayPista==true)
//{
// System.out.println("Avion numero: "+ numeroAvion+ " quiere aterrizar");
// System.out.println("Avion numero: "+ numeroAvion+ " aterriza de la pista "+numeroPista);
Thread.sleep(10);
//}
//deja la pista
oTorre.dejarPistaLibre(numeroPista);
// System.out.println("Avion numero: "+ numeroAvion+ " DEJA libre la pista "+numeroPista);
// System.out.println("Avion numero: "+ numeroAvion+ " aterrizo");
System.out.println("Avión "+numeroAvion+" ya aterrizó.");
}
}





import java.util.Random;
import java.util.Scanner;

public class Main {

public static Random aleatorio = new Random();  
public static void main(String[] args) throws InterruptedException {
Scanner sc = new Scanner(System.in);
int numAviones = sc.nextInt();
int numHorasSimulacion = sc.nextInt(); 
sc.close();
Torre torre = new Torre();
Thread hiloTorre = new Thread(torre);
hiloTorre.start();
Thread[] hilosAviones = new Thread[numAviones];
for (int i=0; i<numAviones;i++){
hilosAviones[i] = new Thread(new Avion(i+1,torre));
hilosAviones[i].start(); 
}

Thread.sleep(numHorasSimulacion*60);//he puesto *60

for (int i=0; i<numAviones;i++){
hilosAviones[i].interrupt();
}
for (int i=0; i<numAviones;i++){
hilosAviones[i].join();
}
hiloTorre.interrupt();
hiloTorre.join();
}
}





public class Torre implements Runnable 
{
//Torre oTorre;
private boolean pistaVLibre = true;
private boolean pistaWLibre = true;
public  void run() 
while(!Thread.interrupted())
{
}
System.out.println("TORRE CERRADA");
//return;
System.exit(0);
}

public synchronized void dejarPistaLibre(int numeroPista) 
{
if (numeroPista==1)
{
pistaVLibre =true;
notifyAll ();
}
else
{
pistaWLibre =true;
notifyAll ();
}
}

public synchronized int obtenerPista() 
{
boolean pistaLibre = (pistaVLibre || pistaWLibre);
while (!pistaLibre){
try {
wait();
}
catch (Exception e) {}
}
if (pistaVLibre==true)
{
pistaVLibre=false;
return 1;
}
pistaWLibre=false;
return 2;
}
}