Оглавление

Многопоточность
Процессы, потоки и приоритеты
Многопоточность в Java
Многопоточность и анимация
Синхронизация потоков
Потоки-демоны
Аплет Rectangles
Исходные тексты
Описание текстов

    Исходные тексты аплета Rectangles

    Исходные тексты аплета Rectangles приведены в листинге 1.

    Листинг 1. Файл Rectangles,java

    import java.applet.*;
    import java.awt.*;
    public class Rectangles extends Applet
    {
      DrawRectangles m_DrawRectThread = null;
      DrawEllipse m_DrawEllipseThread = null;
      NotifyTask m_NotifyTaskThread = null
      public String getAppletInfo()
      {
        return "Name: Rectangles";
      }
      public void paint(Graphics g)
      {
        Dimension dimAppWndDimension = getSize();
        g.setColor(Color.yellow);
        g.fillRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
        g.setColor(Color.black);
        g.drawRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
      }
      public void start()
      {
        if (m_DrawRectThread == null)
        {
          m_DrawRectThread = 
            new DrawRectangles(this);
          m_DrawRectThread.start();
        }
        if (m_DrawEllipseThread == null)
        {
          m_DrawEllipseThread = 
            new DrawEllipse(this);
          m_DrawEllipseThread.start();
        }
        if (m_NotifyTaskThread == null)
        {
          m_NotifyTaskThread = 
            new NotifyTask(m_DrawEllipseThread);
          m_NotifyTaskThread.start();
        }
      }
    
      public void stop()
      {
        if (m_DrawRectThread != null)
        {
          m_DrawRectThread.stop();
          m_DrawRectThread = null;
        }
        if (m_DrawEllipseThread == null)
        {
          m_DrawEllipseThread.stop();
          m_DrawEllipseThread = null;
        }    
        if (m_NotifyTaskThread != null)
        {
          m_NotifyTaskThread.stop();
          m_NotifyTaskThread = null;
        }
      }
    }
    class DrawRectangles extends Thread
    {
      Graphics g;
      Dimension dimAppWndDimension;
      public DrawRectangles(Applet Appl)
      {
        g = Appl.getGraphics();
        dimAppWndDimension = Appl.getSize();
      }
      public void run()
      {
        while (true)
        {
          int x, y, width, height;
          int rColor, gColor, bColor;      
          x =      (int)(dimAppWndDimension.width 
                * Math.random());
          y =      (int)(dimAppWndDimension.height
                * Math.random());
          width  = (int)(dimAppWndDimension.width
                * Math.random()) / 2;
          height = (int)(dimAppWndDimension.height
                * Math.random()) / 2;      
          rColor = (int)(255 * Math.random());
          gColor = (int)(255 * Math.random());
          bColor = (int)(255 * Math.random());
          g.setColor(new Color(rColor, 
            gColor, bColor));
          g.fillRect(x, y, width, height);
          try
          {
    	Thread.sleep(50);
          }
          catch (InterruptedException e)
          {
    	stop();
          }
        }
      }
    }
    class DrawEllipse extends Thread
    {
      Graphics g;
      Dimension dimAppWndDimension;
      public DrawEllipse(Applet Appl)
      {
        g = Appl.getGraphics();
        dimAppWndDimension = Appl.getSize();
      }
      public synchronized void run()
      {
        while (true)
        {
          int x, y, width, height;
          int rColor, gColor, bColor;
          x =      (int)(dimAppWndDimension.width
              * Math.random());
          y =      (int)(dimAppWndDimension.height
              * Math.random());
          width  = (int)(dimAppWndDimension.width
              * Math.random()) / 2;
          height = (int)(dimAppWndDimension.height
              * Math.random()) / 2;
          rColor = (int)(255 * Math.random());
          gColor = (int)(255 * Math.random());
          bColor = (int)(255 * Math.random());
          g.setColor(new Color(rColor,
             gColor, bColor));
          g.fillOval(x, y, width, height);
          try
          {
    	this.wait();
          }
          catch (InterruptedException e)
          {
          }
        }
      }
    }
    class NotifyTask extends Thread
    {
      Thread STask;
      public NotifyTask(Thread SynchroTask)
      {
        STask = SynchroTask;
      }
      public void run()
      {
        while (true)
        {
          try
          {
    	Thread.sleep(30);
          }
          catch (InterruptedException e)
          {
          }
          synchronized(STask)
          {
            STask.notify();
          }
        }
      }
    }


Java | Продукты и решения | Технологии | Сервис и обучение
О компании | Партнеры | Новости | Поиск
Sun Microsystems Inc. Corporate Information Our partners News and Events Search on site Java Computing Products and Solutions Technologies and Researches Education and Service Content



Сайт создан в системе uCoz