国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

多線程程序設(shè)計

2019-11-18 15:06:07
字體:
供稿:網(wǎng)友

  作者:jeru

多線程程序設(shè)計

◆ 多線程簡介

  線程(thread)是操作系統(tǒng)分配 CPU 時間的基本實體。每一個應(yīng)用程序至少有一個線程,也可以擁有多個線程。線程是程序中的代碼流。多個線程可以同時運行,并能共享資源。

  線程與進(jìn)程不同,每個進(jìn)程都需要操作系統(tǒng)為其分配獨立的地址空間。而同一進(jìn)程中的各個線程是在同一塊地址空間中工作。

  在 java 程序中,一些動態(tài)效果(如動畫的實現(xiàn)、動態(tài)的字幕等)常利用多線程技術(shù)來實現(xiàn)。

  在 Java 語言中可以非常方便地使用多線程。和 Visual C++ 相比,Java 的多線程既輕易學(xué)習(xí),又輕易使用。

◆ 創(chuàng)建多線程的兩種辦法:

 ?。?)建立類 Thread 的子類

 ?。?)實現(xiàn)接口 Runnable

  第二個辦法比第一個使用得更為廣泛。本講座重點講解第二個辦法。

◆ 接口

  Java 語言取消了 C++ 的多重繼續(xù)(“多重繼續(xù)”經(jīng)常使 C++ 程序員陷入混亂之中)。Java 增加了“接口”(interface)的概念,使 Java 在取消多重繼續(xù)后,并未使功能下降。

  “接口”(interface)是一種非凡的類。當(dāng)你定義一個類時,可以“實現(xiàn)”(implements)一個(或多個)接口。語法如下:

  class 類名 extends 超類名 implements 接口名

◆ 例 1.5.1 一個最簡單的多線程小應(yīng)用程序

import java.applet.*;
import java.awt.*;
public class k04a extends Applet implements Runnable
{
  PRivate Thread m_k04a = null;
  public k04a()
  {
  }
  public void paint(Graphics g)
  {
    g.drawString("Running: " + Math.random(), 10, 20);
  }
  public void start()
  {
    m_k04a = new Thread(this);
    m_k04a.start();
  }
  public void stop()
  {
    m_k04a.stop();
    m_k04a = null;
  }
  public void run()
  {
    while (true)
    {
      try
      {
        repaint();
        Thread.sleep(200);
      }
      catch (InterruptedException e)
      {
        stop();
      }
    }
  }
}

◆ 控制線程的生命周期

 ?。?)start()方法 啟動一個線程

 ?。?)run()方法 定義該線程的動作

 ?。?)sleep()方法 使線程睡眠一段時間,單位為毫秒

 ?。?)suspend()方法 使線程掛起

 ?。?)resume()方法 恢復(fù)掛起的線程

  (6)yield()方法 把線程移到隊列的尾部

 ?。?)stop()方法 結(jié)束線程生命周期并執(zhí)行清理工作

 ?。?)destroy()方法 結(jié)束線程生命周期但不做清理工作

  其中最常用的是start(),run(),sleep(),stop()。

◆ try ?? catch 語句

  用于對“異?!钡奶幚?。和“錯誤”相比,“異?!笔潜容^稍微的。它是指程序在運行中發(fā)生的意外情況。(try - catch 語句在 C++ 中也有)。

  在執(zhí)行 try 后面的語句時,假如發(fā)生異常,則執(zhí)行 catch 后面的語句。

◆ 例 1.5.2 流動的標(biāo)題

  該程序在運行時,三個標(biāo)題在由下而上不斷變換。

Html 文件中的寫法:(三個圖片要事先做好)



JAVA 源程序:

import java.awt.*;
import java.applet.Applet;

public class testani extends Applet implements Runnable
{
  Thread runner;
  Image imgs[];
  int high, y1, y2, y3;
  public void init()
  {
    high = size().height;
    y1 = high;
    y2 = high*2;
    y3 = high*3;
    imgs = new Image[10];
    for(int i=0;i<3;i++)
      imgs[i]=getImage(getCodeBase(),getParameter("image"+(i+1)));
  }
  public void start()
  {
    runner = new Thread(this);
    runner.start();
  }
  public void stop()
  {
    runner.stop();
    runner = null;
  }
  public void run()
  {
    while (runner != null)
    {
      try
      {
        Thread.sleep(100);
        repaint();
        y1--;
        if(y1==0)
        {
          Thread.sleep(3000);
          y2=high;
        }
        y2--;
        if(y2==0)
        {
          Thread.sleep(3000);
          y3=high;
        }
        y3--;
        if(y3==0)
        {
          Thread.sleep(3000);
          y1 = high;
        }
      }
      catch (InterruptedException e){}
    }
  }
  public void paint(Graphics g)
  {
    g.drawImage(imgs[0], 0, y1, this);
    g.drawImage(imgs[1], 0, y2, this);
    g.drawImage(imgs[2], 0, y3, this);
  }
  public void update(Graphics g)
  {
    paint(g);
  }
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 穆棱市| 蒙阴县| 元江| 隆安县| 沁阳市| 兴山县| 东乌珠穆沁旗| 荔浦县| 金寨县| 平潭县| 长乐市| 栖霞市| 宣威市| 义乌市| 松滋市| 奇台县| 霍山县| 三河市| 罗城| 尉犁县| 元阳县| 贡嘎县| 衡阳县| 罗源县| 大港区| 皋兰县| 伊川县| 临漳县| 仁化县| 舟山市| 云林县| 通辽市| 泰和县| 安陆市| 从化市| 溧阳市| 巴里| 林州市| 广灵县| 亚东县| 凤翔县|