分享
 
 
 

Thread类与Runnable接口

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Thread类与Runnable接口

1.继承Thread类并重载run方法[/url]

Thread类:是专门用来创建线程和对线程进行操作的类。Thread中定义了许多方法对线程进行操作。

Thread类在缺省情况下run方法是空的。可以通过继承Thread类并重写Thread类的run方法实现用户线程。

总体结构如下:

public class MyThread extends Thread {

public void run() {

… …

}

}

MyThread t = new MyThread();

t. start();

见例题:[url=http://blog.csdn.net/duoshanx/admin/chapter6/ThreadController.java]TwoThreadsTest.java

TwoThreadsTest.java:该例子演示了如何通过继承Thread的方法实现线程。该例子同时启动了两个线程。请运行之,注意运行结果

class TwoThreadsTest {

public static void main (String args[]) {

new SimpleThread("Jamaica").start();

new SimpleThread("Fiji").start();

}

}

class SimpleThread extends Thread {

public SimpleThread(String str) {

super(str);

}

public void run() {

for (int i = 0; i < 10; i++) {

System.out.println(i + " " + getName());

try {

sleep((int)(Math.random() * 1000));

} catch (InterruptedException e) {}

}

System.out.println("DONE! " + getName());

}

}

在这个例子中,类 TwoThreadsTest的main( )方法中构造了两个 SimpleThread类的线程,一个称为"Jamaica",另一个为 " Fiji ",并在构造后马上就调用了start( )方法来启动这两个线程。

类SimpleThread是类Thread的子类,它首先定义了一个构造方法,其中自变量为字符串类型,例如上面的" Fiji ", 它的作用就是给线程取名。类SimpleThread中的第二个方法是run( )方法,它覆盖了类Thread中的run( )方法。run( )方法中是一个10次的循环,每次循环中显示循环的次数和当前正运行的线程的名称,然后睡眠一个随机产生的时间间隔。在循环结束后,就显示"DONE!"及线程名。

下面我们来看一下运行结果:

0 Jamaica

0 Fiji

1 Fiji

1 Jamaica

2 Jamaica

2 Fiji

3 Fiji

3 Jamaica

4 Jamaica

4 Fiji

5 Jamaica

5 Fiji

6 Fiji

6 Jamaica

7 Jamaica

7 Fiji

8 Fiji

9 Fiji

8 Jamaica

DONE! Fiji

9 Jamaica

DONE! Jamaica

可以看到在输出结果中两个线程的名称是混合在一起的,也没有顺序可循,这是因为这两个线程是同时运行的,并且是同时显示输出

2.执行Runnable接口的类实现run方法[/url]

通过建立一个实现了Runnable接口的对象,并以它作为线程的目标对象来创建一个线程。

Runnable接口:定义了一个抽象方法run()。定义如下:

public interface java.lang.Runnable{

public abstract void run();

}

创建的总体框架如下:

class MyRunner implements Runnable {

public void run() {

}

}

MyRunner r = new MyRunner();

Thread t = new Thread( ThreadGroup group, Runnable target, String name);

见例题:

[url=http://blog.csdn.net/duoshanx/admin/chapter6/ThreadTester.java]ThreadTesterer.java

ThreadTest.java

例如:

public class Clock extends java.applet.Applet

implements Runnable {

Thread clockThread;

public void start() {

if (clockThread == null) {

clockThread = new Thread(this, "Clock");

clockThread.start();

}

}

public void run() {

while (clockThread != null) {

repaint();

try {

clockThread.sleep(1000);

} catch (InterruptedException e){

}

}

}

public void paint(Graphics g) {

Date now = new Date();

g.drawString(now.getHours() + ":"

+ now.getMinutes() + ":"

+ now.getSeconds(), 5, 10);

}

public void stop() {

clockThread.stop();

clockThread = null;

}

}

这是一个时钟Applet,它显示当前时间并逐秒进行更新。该Applet利用Runnable接口为其线程提供run()方法。类Clock由类Applet扩展而得,但同时它需要一个线程来实现时间的更新显示。由于Java中不支持多重继承,所以它不能再继承类Thread,而是利用了Runnable接口。

首先,在start()方法中构造了一个名为clockThread的线程 并调用Thread.start()方法来启动这一线程,即在Java运行时建立系统的线程关系。下面这句建立了一个新的线程:

clockThread = new Thread(this, "Clock");

其中this是Thread 构造方法中的第一个自变量,作为该线程的目标对象,它必须实现Runnable接口。在这种构造方法下,线程clockThread就以它的可运行的目标对象中的run()方法为其run()方法,在本例中,这个目标对象就是Clock Applet。构造方法中的第二个变量为线程名。

线程被启动以后,调用目标对象的run()方法,除非线程被停止。在run()方法的循环中,Applet重绘本身,然后睡眠1秒,同时要捕获例外事件并进行处理。

如果你离开显示时钟的这一页,应用程序将调用stop()方法,将线程置空。当你返回时,又会创建一个新的线程。

在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。

3.总结:[/url]

1.两种方法均需执行线程的start方法为线程分配必须的系统资源、调度线程运行并执行线程的run方法。

2.在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。

3.线程的消亡不建议通过调用一个stop()命令。而是让run()方法自然结束。

见例题:[url=http://blog.csdn.net/duoshanx/admin/chapter6/ThreadController.java] ThreadController.java

关闭

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有