PROGRAMACIÓN CONCURRENTE Y PARALELA Asesora: Carmen Cerón Garnica Alumnos: Oscar Eduardo González Ramos Michael Castañeda Trejo Jesús Uriel Rodríguez Cuautle Iván Hernández Pedraza Judith Angélica Herrera Nicio Alan Job de la Luz Hernández INTRODUCCIÓN La necesidad de ofrecer concurrencia en el acceso a los recursos computacionales se remonta a los primeros sistemas operativos. Aprovechar al máximo los recursos computacionales fue una necesidad apremiante, sobre todo en la época en que las computadoras eran caras y escasas; el sistema operativo tenía que ofrecer la ejecución concurrente y segura de programas de varios usuarios, que desde distintas terminales utilizaban un solo procesador, y así surgió la necesidad de introducir algunos conceptos de programación concurrente para programar los sistemas operativos El estudio de esta materia es la programación concurrente y paralela. Así que, como parte de la concurrencia, se efectuó un ejercicio de la creación de hilos de procesos por dos métodos: Por herencia utilizando la clase Thread y Utilizando la interfaz Runnable. 1 DESARROLLO Contesta las siguientes preguntas: ¿A qué se le llama procesamiento múltiple? Multiprocesamiento o multitarea es ejecutar uno o más procesos en dos o más procesadores dentro de una misma computadora. Da un ejemplo cotidiano donde se realizan actividades concurrentes Por ejemplo, un alumno estudia para un examen, codifica un programa para su proyecto final, mantiene activo su chat en Facebook y escucha música con Spotify. Así que un mismo individuo puede hacer múltiples actividades a la vez, en algunos casos interrumpe momentáneamente algunas tareas para enfocarse a otras. Codifica las tres versiones de la pelota y reboteador ¿Cuál es la diferencia entre los tres programas de la pelota? 01Pelota o Es un par de clases que ocupan las funciones gráficas que ocupa la función mostrar de un método de la clase Pelota. o Es necesario detener el proceso para cerrar la ventana. 02Pelota o Es un par de clases que ocupan las funciones gráficas pero la clase Pelota extends Thread y ocupa la función start de hilos. o Al presionar iniciar salen más pelotas. o Se puede cerrar con el icono de la ventana. 03Pelota 2 o Es un par de clases que ocupan las funciones gráficas pero la clase Pelota extends Thread y ocupa la función start de hilos. o Incorpora el boton detener con el método porFavorDetente(); o Al presionar iniciar salen mas pelotas o Si se presiona detener y despues iniciar, sale una nueva pelota que borra poco a poco a la anterior. ¿Qué método de la clase Thread se utiliza en el programa de la pelota para poder permitir su tiempo a cada parte del programa y explica cómo funciona? Start(). Dentro de este método hay un ciclo for que ayuda a las posiciones diferentes de la pelota Recuerda que un Applet se compila y el fichero .class resultante de la compilación, se ha de incrustar en un fichero para ser ejecutado por un navegador. Código de la Pagina.html y lo guardas como Pagina.html donde tengas archivo .class. 3 PRÁCTICA 3 | PELOTA PROGRAMA 1. APPLET import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Pelota { private Graphics g; private int x = 7, xCambio = 7; private int y = 0, yCambio = 2; private int diametro = 10; private int rectIzqX = 0, rectDerX = 100; private int rectSupY = 0, rectInfY = 100; public Pelota(Graphics graficos) { g = graficos; } public void mostrar() { g.drawRect(rectIzqX, rectSupY, rectDerX - rectIzqX + 10, rectInfY - rectSupY + 10); for (int n =1; n < 1000; n++) { g.setColor(Color.white); g.fillOval(x, y, diametro, diametro); if(x + xCambio <= rectIzqX) xCambio = -xCambio; if(x + xCambio >= rectDerX) xCambio = -xCambio; 4 if(y + yCambio <= rectSupY) yCambio = -yCambio; if(y + yCambio >= rectInfY) yCambio = -yCambio; x = x + xCambio; y = y + yCambio; g.setColor(Color.red); g.fillOval(x, y, diametro, diametro); try { Thread.sleep(50); } catch(InterruptedException e) { System.err.println("Excepción de activadad de inactividad"); } } } } ________________________________________________________________________________________ import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Reboteador extends Applet implements ActionListener{ private Button iniciar; public void init() { iniciar = new Button("Iniciar"); add(iniciar); iniciar.addActionListener(this); } 5 public void actionPerformed(ActionEvent event) { if(event.getSource() == iniciar) { Graphics g = getGraphics(); Pelota pelota = new Pelota(g); pelota.mostrar(); } } } Figura 1 6 PROGRAMA 2. APPLET import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Pelota2 extends Thread { private Graphics g; private int x = 7, xCambio = 7; private int y = 0, yCambio = 2; private int diametro = 10; private int rectIzqX = 0, rectDerX = 100; private int rectSupY = 0, rectInfY = 100; public Pelota2(Graphics graficos) { g = graficos; } public void run() { g.drawRect(rectIzqX, rectSupY, rectDerX - rectIzqX + 10, rectInfY - rectSupY + 10); for (int n =1; n < 1000; n++) { g.setColor(Color.white); g.fillOval(x, y, diametro, diametro); 7 if(x + xCambio <= rectIzqX) xCambio = -xCambio; if(x + xCambio >= rectDerX) xCambio = -xCambio; if(y + yCambio <= rectSupY) yCambio = -yCambio; if(y + yCambio >= rectInfY) yCambio = -yCambio; x = x + xCambio; y = y + yCambio; g.setColor(Color.red); g.fillOval(x, y, diametro, diametro); try { Thread.sleep(50); } catch(InterruptedException e) { System.err.println("excepcion de inactividad"); } } } } ________________________________________________________________________________________ import java.awt.*; import java.applet.Applet; import java.awt.event.*; 8 public class Rebotador2 extends Applet implements ActionListener { private Button iniciar; public void init() { iniciar = new Button("Iniciar"); add(iniciar); iniciar.addActionListener(this); } public void actionPerformed(ActionEvent event) { if(event.getSource() == iniciar) { Graphics g = getGraphics(); Pelota2 pelota = new Pelota2(g); pelota.start(); } } } Figura 2 9 PROGRAMA 3. APPLET import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Pelota3 extends Thread { private boolean seguirRebotando; private Graphics g; private int x = 7, xCambio = 7; private int y = 0, yCambio = 2; private int diametro = 10; private int rectIzqX = 0, rectDerX = 100; private int rectSupY = 0, rectInfY = 100; public Pelota3(Graphics graficos) { g = graficos; seguirRebotando = true; } public void porFavorDetente() { seguirRebotando = false; } public void run() { g.drawRect(rectIzqX, rectSupY, rectDerX - rectIzqX + 10, rectInfY - rectSupY + 10); while(seguirRebotando) { g.setColor(Color.white); g.fillOval(x, y, diametro, diametro); 10 if(x + xCambio <= rectIzqX) xCambio = -xCambio; if(x + xCambio >= rectDerX) xCambio = -xCambio; if(y + yCambio <= rectSupY) yCambio = -yCambio; if(y + yCambio >= rectInfY) yCambio = -yCambio; x = x + xCambio; y = y + yCambio; g.setColor(Color.red); g.fillOval(x, y, diametro, diametro); try { Thread.sleep(50); } catch(InterruptedException e) { System.err.println("excepcion de inactividad"); } } } } import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Rebotador3 extends Applet implements ActionListener { private Button iniciar, detener; private Pelota3 pelota; 11 public void init() { iniciar = new Button("Iniciar"); add(iniciar); iniciar.addActionListener(this); detener = new Button("Detener"); add(detener); detener.addActionListener(this); } public void actionPerformed(ActionEvent event) { if(event.getSource() == iniciar) { Graphics g = getGraphics(); pelota = new Pelota3(g); pelota.start(); } if(event.getSource() == detener) pelota.porFavorDetente(); } } Figura 3 12 PROGRAMA 4. HTML CON APPLET <html> <title> Pelota Concurrente </title> <body> <applet code="Pelota.class" width="300" height="100"> </applet> </body> </html> public class Priority_Herencia extends Thread 13 CONCLUSIÓN La creación de APPLET´s por medio de hilos es una forma mejorada de trabajar con programas. Permite una mejor ejecución y también se individualiza su ejecutor. 14 BIBLIOGRAFÍA http://thales.cica.es/rd/Recursos/rd99/ed99-0444-03/creaHilos.html 15