La Multiprogrammazione in Java

Passiamo ora alla multiprogrammazione cioe' alla possibilita' di far partire dei processi che girano in parallelo col processo che li ha fatti partire.Il tutto viene gestito attraverso l'oggetto Thread.Il processo da eseguire va indicato nel metodo run dello stesso oggetto, mentre i metodi start e stop possono essere usati per far partire/stoppare il processo in parallelo. Il processo si ferma anche perche' l'algoritmo indicato in run ha finito l'esecuzione. Il metodo stop e' stato deprecato e negli esempi che seguono si fa fermare il Thread usando una tecnica diversa.
La multiprogrammazione con Thread in un applet e' un'interessante caso di uso di oggetto del quale abbiamo bisogno di ridefinire un metodo di una classe diversa dalla classe madre :in questo caso il metodo run di Thread mentre la classe madre e' Applet.
Applet 1 : realizzazione di un'animazione senza multiprogrammazione. S

import javax.swing.*;
import java.awt.*;

  public class Anim0 extends JApplet  {

   int x,y,r;
   Display disegno;
   
   public void init() {
     disegno = new Display();
     setContentPane(disegno);
     
     x = 0; y=200; r=50;

    while(true) {
      for (x = r; x <= disegno.getSize().width ; x=x+1) {
        disegno.repaint();
 }
 }
 }
   class Display extends JPanel{
    public void  paintComponent(Graphics g) {
      g.setColor(Color.red);
      g.fillOval(x,y,2*r,2*r);
   }
   }
}
Vedete qui l'applet in funzione.
Non si vede niente,perche' non abbiamo alcun controllo sul tempo.Quando riusciamo a guardare l'applet, l'animazione e' gia' finita.


Applet 2 : realizzazione di un'animazione con la multiprogrammazione. S
 

import java.awt.*;
import javax.swing.*;



  public class Anim1 extends JApplet implements Runnable {
   
   Display disegno;
   Thread animazione;
   int x,y,r;
   
   public void init() {

     disegno = new Display();
     setContentPane(disegno);
     x = 0; y=200; r=50;
       }

   public void start() {
    if (animazione == null) {
        animazione = new Thread(this);
        animazione.start();
    }
   }

  public void stop() {
     if (animazione != null) {
       animazione = null;
     }
   }

   public void run() {
    while(true) {
      for (x = r; x <= disegno.getSize().width ; x=x+1) {
        disegno.repaint();
        try { Thread.sleep(100);}
       catch (InterruptedException e) { }
 }
 }
 }
   class Display extends JPanel{

    public void  paintComponent(Graphics g) {
      super.paintComponent(g);
      g.setColor(Color.red);
      g.fillOval(x,y,2*r,2*r);
   }
}
}
Vedete qui l'applet in funzione.



Applet 3 : come il precedente ma ora l'animazione e' realizzata con un Timer di swing . S

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


  public class Anim2 extends JApplet implements ActionListener {

                                                                                   Display disegno;
   Timer timer;
   int x,y,r;
   Image o;
   Graphics og;
   
   public void init() {

     disegno = new Display();
     setContentPane(disegno);
     x = 0; y=200; r=50;
     }

   public void start() {
    if (timer == null) {
        timer = new Timer(100,this);
        timer.start();
    }
   }

  public void stop() {
     if (timer != null) {
       timer.stop();
     }
   }

   public void actionPerformed(ActionEvent e) {
      x = x + 1;
      if(x>disegno.getSize().width)x = 0;
        disegno.repaint();
 }
    class Display extends JPanel{


    public void  paintComponent(Graphics g) {
      super.paintComponent(g);
      g.setColor(Color.red);
      g.fillOval(x,y,2*r,2*r);


   }
   }
}
Vedete qui l'applet in funzione.
Ultimo aggiornamento: Thu, 24 Jan 2002 15:45:10 GMT