UNIDAD III.- Programación concurrente con Java A).

Anuncio
UNIDAD III.- Programación concurrente con Java
A).- Dos instancias de un contador simple (el proceso es completamente secuencial).
package hilosinicio;
public class Contador{
private String mensaje;
public Contador(String mensaje){
this.mensaje = mensaje;
}
public void contar(){
for(int i=0;i<=10;i++){
System.out.println(mensaje+" = "+i);
}
}
}
package hilosinicio;
public class Main {
public static void main(String[] args) {
System.out.println("Inicio de main");
Contador x1 = new Contador("UNO");
Contador x2 = new Contador("DOS");
System.out.println("Inicio de UNO");
x1.contar();
System.out.println("Fin de UNO");
System.out.println("Inicio de DOS");
x2.contar();
System.out.println("Fin de DOS");
System.out.println("Fin de main");
}
}
B).- Dos instancias de un contador implementado como un hilo.
package hilosinicio;
public class Contador extends Thread{
private String mensaje;
public Contador(String mensaje){
this.mensaje = mensaje;
}
public void run(){
try{
for(int i=0;i<=10;i++){
System.out.println(mensaje+" = "+i);
}
sleep(10); //milisegundos
}
} catch(InterruptedException e){
System.out.println("Error");
}
}
package hilosinicio;
public class Main {
public static void main(String[] args) {
System.out.println("Inicio de main");
Contador x1 = new Contador("UNO");
Contador x2 = new Contador("DOS");
System.out.println("Inicio de UNO");
x1.start();
System.out.println("Fin de UNO");
System.out.println("Inicio de DOS");
x2.start();
System.out.println("Fin de DOS");
System.out.println("Fin de main");
}
}
C).- Ejemplo de hilos en ambiente gráfico
package hilosgrafico;
import javax.swing.*;
import java.awt.*;
public class Ventana extends JPanel{
private JSlider barra1;
private JSlider barra2;
private JSlider barra3;
public Ventana(){
addComponentes();
}
public JSlider getBarra1(){
return barra1;
}
public JSlider getBarra2(){
return barra2;
}
public JSlider getBarra3(){
return barra3;
}
public void addComponentes(){
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
Label l1 = new Label("Contador 1");
Label l2 = new Label("Contador 2");
Label l3 = new Label("Contador 3");
setLayout(new BorderLayout());
barra1 = new JSlider(JSlider.VERTICAL, 0,1000, 0);
barra1.setMajorTickSpacing(2);
barra1.setMinorTickSpacing(1);
barra1.setPaintTicks(true);
barra2 = new JSlider(JSlider.VERTICAL, 0,1000, 0);
barra2.setMajorTickSpacing(2);
barra2.setMinorTickSpacing(1);
barra2.setPaintTicks(true);
barra3 = new JSlider(JSlider.VERTICAL, 0,1000, 0);
barra3.setMajorTickSpacing(2);
barra3.setMinorTickSpacing(1);
barra3.setPaintTicks(true);
l1.setAlignment(Label.CENTER);
l2.setAlignment(Label.CENTER);
l3.setAlignment(Label.CENTER);
add(p1,"Center");
add(p2,"South");
p1.setLayout(new GridLayout(1,3));
p2.setLayout(new GridLayout(1,3));
p1.add(barra1);
p1.add(barra2);
p1.add(barra3);
p2.add(l1);
p2.add(l2);
p2.add(l3);
}
}
class Contador extends Thread{
private JSlider slider;
public Contador(JSlider slider){
this.slider = slider;
}
public void run(){
try{
for(int i=0;i<=1000;i++){
slider.setValue(i);
for(int j=0;j<10000000;j++);
Thread.sleep(1);
}
}
catch(InterruptedException e){
System.out.println("Error");
}
}
}
package hilosgrafico;
import javax.swing.*;
public class MiFrame extends JFrame{
private
private
private
private
Ventana v1;
Contador c1;
Contador c2;
Contador c3;
public MiFrame(){
super("Ventana con Sliders");
setSize(400,400);
setLocation(200,100);
addComponentes();
setVisible(true);
c1.setPriority(10);
c2.setPriority(1);
c1.start();
c2.start();
c3.start();
}
public void
v1 = new
c1 = new
c2 = new
c3 = new
add(v1);
}
addComponentes(){
Ventana();
Contador(v1.getBarra1());
Contador(v1.getBarra2());
Contador(v1.getBarra3());
}
package hilosgrafico;
public class Main {
public static void main(String[] args) {
new MiFrame();
}
}
D.- Implementando un hilo utilizando la interfaz Runnable
package hilosinicio;
public class OtroContador implements Runnable{
public void run(){
try{
for(int i=0;i<=10;i++){
System.out.println(Runnable+" = "+i);
Thread.sleep(10); //milisegundos
}
} catch(InterruptedException e){
System.out.println("Error");
}
}
}
package hilosinicio;
public class Main {
public static void main(String[] args) {
System.out.println("Inicio de main");
Contador x1 = new Contador("UNO");
Contador x2 = new Contador("DOS");
OtroContador x3 = new OtroContador();
Thread x4 = new Thread(x3);
System.out.println("Inicio de UNO");
x1.start();
System.out.println("Fin de UNO");
System.out.println("Inicio de DOS");
x2.start();
System.out.println("Fin de DOS");
System.out.println("Inicio de Runnable");
x4.start();
System.out.println("Fin de Runnable");
System.out.println("Fin de main");
}
}
E.- Implementando un objeto gráfico sin hilos
import java.awt.*;
import java.awt.event.*;
public class HPelota extends Frame{
private Button inicio;
private Balon balon;
public HPelota(){
super("Ejemplo de Hilos");
setSize(400,400);
setBackground(Color.yellow);
addComponentes();
addEventos();
setVisible(true);
}
public void addComponentes(){
setLayout(new FlowLayout());
inicio = new Button("Iniciar");
add(inicio);
}
public void addEventos(){
addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
inicio.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Graphics g = getGraphics();
Balon b = new Balon(g);
b.pintar();
}
});
}
class Balon {
private int x;
private int y;
private int diametro;
private int xInc;
private int yInc;
private Graphics g;
public Balon(Graphics g){
x=(int)(Math.random()*300+1);
y=(int)(Math.random()*300+1);
diametro=25;
double signo1=Math.random();
double signo2=Math.random();
xInc = 5*(signo1>0.5?1:-1);
yInc = signo2>0.5?5:-5;
this.g = g;
}
public void pintar(){
for(int n=1;n<300;n++){
g.setColor(Color.YELLOW);
g.fillOval(x,y,diametro,diametro);
if(x + xInc <= 0)
xInc = -xInc;
if(x + xInc >= 400)
xInc = -xInc;
if(y + yInc <= 0)
yInc = -yInc;
if(y + yInc >= 400)
yInc = -yInc;
x+=xInc;
y+=yInc;
g.setColor(Color.RED);
g.fillOval(x,y,diametro,diametro);
try{
Thread.sleep(10);
}
catch(InterruptedException e){
}
}
g.setColor(Color.YELLOW);
g.fillOval(x,y,diametro,diametro);
}
}
}
F.- Implementando un objeto gráfico con hilos
import java.awt.*;
import java.awt.event.*;
public class HPelota extends Frame{
private Button inicio;
private Balon balon;
public HPelota(){
super("Ejemplo de Hilos");
setSize(400,400);
setBackground(Color.yellow);
addComponentes();
addEventos();
setVisible(true);
}
public void addComponentes(){
setLayout(new FlowLayout());
inicio = new Button("Iniciar");
add(inicio);
}
public void addEventos(){
addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
inicio.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Graphics g = getGraphics();
Balon b = new Balon(g);
b.run();
}
});
}
class Balon extends Thread{
private int x;
private int y;
private int diametro;
private int xInc;
private int yInc;
private Graphics g;
public Balon(Graphics g){
x=(int)(Math.random()*300+1);
y=(int)(Math.random()*300+1);
diametro=25;
double signo1=Math.random();
double signo2=Math.random();
xInc = 5*(signo1>0.5?1:-1);
yInc = signo2>0.5?5:-5;
this.g = g;
}
public void run(){
for(int n=1;n<300;n++){
g.setColor(Color.YELLOW);
g.fillOval(x,y,diametro,diametro);
if(x + xInc <= 0)
xInc = -xInc;
if(x + xInc >= 400)
xInc = -xInc;
if(y + yInc <= 0)
yInc = -yInc;
if(y + yInc >= 400)
yInc = -yInc;
x+=xInc;
y+=yInc;
g.setColor(Color.RED);
g.fillOval(x,y,diametro,diametro);
try{
Thread.sleep(10);
}
catch(InterruptedException e){
}
}
g.setColor(Color.YELLOW);
g.fillOval(x,y,diametro,diametro);
}
}
}
Descargar