多線程程序設(shè)計(jì) (轉(zhuǎn))
發(fā)表時(shí)間:2023-08-16 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]多線程程序設(shè)計(jì) ◆ 多線程簡(jiǎn)介 線程(thread)是操作系統(tǒng)分配 CPU 時(shí)間的基本實(shí)體。每一個(gè)應(yīng)用程序至少有一個(gè)線程,也可以擁有多個(gè)線程。線程是程序中的代碼流。多個(gè)線程可以同時(shí)運(yùn)行,并能共享...
多線程程序設(shè)計(jì)
◆ 多線程簡(jiǎn)介
線程(thread)是操作系統(tǒng)分配 CPU 時(shí)間的基本實(shí)體。每一個(gè)應(yīng)用程序至少有一個(gè)線程,也可以擁有多個(gè)線程。線程是程序中的代碼流。多個(gè)線程可以同時(shí)運(yùn)行,并能共享資源。
線程與進(jìn)程不同,每個(gè)進(jìn)程都需要操作系統(tǒng)為其分配獨(dú)立的地址空間。而同一進(jìn)程中的各個(gè)線程是在同一塊地址空間中工作。
在 Java 程序中,一些動(dòng)態(tài)效果(如動(dòng)畫的實(shí)現(xiàn)、動(dòng)態(tài)的字幕等)常利用多線程技術(shù)來實(shí)現(xiàn)。
在 Java 語言中可以非常方便地使用多線程。和 Visual C++ 相比,Java 的多線程既容易學(xué)習(xí),又容易使用。
◆ 創(chuàng)建多線程的兩種辦法:
。1)建立類 Thread 的子類
。2)實(shí)現(xiàn)接口 Runnable
第二個(gè)辦法比第一個(gè)使用得更為廣泛。本講座重點(diǎn)講解第二個(gè)辦法。
◆ 接口
Java 語言取消了 C++ 的多重繼承(“多重繼承”常常使 C++ 程序員陷入混亂之中)。Java 增加了“接口”(interface)的概念,使 Java 在取消多重繼承后,并未使功能下降。
“接口”(interface)是一種特殊的類。當(dāng)你定義一個(gè)類時(shí),可以“實(shí)現(xiàn)”(implements)一個(gè)(或多個(gè))接口。語法如下:
class 類名 extends 超類名 implements 接口名
◆ 例 1.5.1 一個(gè)最簡(jiǎn)單的多線程小應(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();
}
}
}
}
◆ 控制線程的生命周期
。1)start()方法 啟動(dòng)一個(gè)線程
(2)run()方法 定義該線程的動(dòng)作
。3)sleep()方法 使線程睡眠一段時(shí)間,單位為毫秒
。4)suspend()方法 使線程掛起
。5)resume()方法 恢復(fù)掛起的線程
(6)yield()方法 把線程移到隊(duì)列的尾部
。7)stop()方法 結(jié)束線程生命周期并執(zhí)行清理工作
。8)destroy()方法 結(jié)束線程生命周期但不做清理工作
其中最常用的是start(),run(),sleep(),stop()。
◆ try —— catch 語句
用于對(duì)“異!钡奶幚怼:汀板e(cuò)誤”相比,“異!笔潜容^輕微的。它是指程序在運(yùn)行中發(fā)生的意外情況。(try - catch 語句在 C++ 中也有)。
在執(zhí)行 try 后面的語句時(shí),如果發(fā)生異常,則執(zhí)行 catch 后面的語句。
◆ 例 1.5.2 流動(dòng)的標(biāo)題
該程序在運(yùn)行時(shí),三個(gè)標(biāo)題在由下而上不斷變換。
HTML 文件中的寫法:(三個(gè)圖片要事先做好)
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);
}
}