http://hi.baidu.com/topsu/blog/item/c179c21876e180b24bedbc66.html
Runnable接口与Thread类的区别
如果让一个线程实现Runnable接口,那么当调用这个线程的对象开辟多个线程时,可以让这些线程调用同一个变量;若这个线程是由继承Thread类而来,则要通过内部类来实现上述功能,利用的就是内部类可任意访问外部变量这一特性。
例子程序:
public class ThreadTest {
public static void main(String[] args) {
MyThread mt = new MyThread();
new Thread(mt).start(); //通过实现Runnable的类的对象来开辟第一个线程
new Thread(mt).start(); //通过实现Runnable的类的对象来开辟第二个线程
new Thread(mt).start(); //通过实现Runnable的类的对象来开辟第三个线程
//由于这三个线程是通过同一个对象mt开辟的,所以run()里方法访问的是同一个index
}
}
class MyThread implements Runnable { //实现Runnable接口
int index = 0;
public void run() {
for(;index <= 200;)
System.out.println(Thread.currentThread().getName() + ":" + index++);
}
}
运行结果:
Thread-0:0
Thread-2:1
Thread-2:2
Thread-2:3
Thread-2:4
Thread-2:5
Thread-2:6
Thread-2:7
Thread-2:8
Thread-2:9
Thread-2:10
Thread-2:11
Thread-2:12
Thread-2:13
Thread-2:14
Thread-2:15
Thread-2:16
Thread-2:17
Thread-0:18
Thread-1:19
Thread-0:20
...
public class ThreadTest {
public static void main(String[] args) {
MyThread mt=new MyThread();
mt.getThread().start(); //通过返回内部类的对象来开辟第一个线程
mt.getThread().start(); //通过返回内部类的对象来开辟第二个线程
mt.getThread().start(); //通过返回内部类的对象来开辟第三个线程
//由于这三个线程是通过同一个匿名对象来开辟的,所以run()里方法访问的是同一个index
}
}
class MyThread {
int index = 0;
private class InnerClass extends Thread { //定义一个内部类,继承Thread
public void run() {
for(; index <= 200;)
System.out.println(getName() + ":" + index++);
}
}
Thread getThread() { //这个函数的作用是返回InnerClass的一个匿名对象
return new InnerClass();
}
}
这里有一个问题:如果内部类要访问一个外部变量或方法,那么这个变量或方法必须定义为final,但为什么这里的变量index不用定义为final就可以被内部类访问?
分享到:
相关推荐
thread 线程类 实现runnable接口
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。
在Java中只支持单继承,因此通过继承Thread类创建线程有一定的局限性,这时可以使用另一种方式,即实现Runnable接口来创建线程。通过这种方式需要在Thread(Runnable target)的构造方法中,传递一个实现了Runnable...
分别用Thread类和Runnable接口实现的阶乘的计算过程及结果的显示(本来一开始设置的不要积分,不知道为啥变得需要积分了,故此调整一下)
1、Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。 2、多线程是并发执行的,交替占有cpu执行,请编写示例程序,并观察输出结果。 3、采用线程同步方法...
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。
主要介绍了Java中继承thread类与实现Runnable接口的比较的相关资料,需要的朋友可以参考下
1. 什么是Runnable接口: 1.1 介绍Runnable接口 1.2 与Thread类的对比 2. 创建线程的方式: 2.1 继承Thread类 2.2 实现Runnable接口 3. 实现Runnable接口: 3.1 实现步骤 3.2 优点与用途 4. 启动线程: 4.1 使用...
实现Runnable接口和继承Thread类两种方式实现在屏幕上随机画正方形线程程序
本文首先介绍了线程的有关概念,接着介绍了线程的生命期及其状态间的转换,多线程的调度 原则,线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口
实现Runnable接口的类必须使用Thread类的实例才能创建线程,通过Runnable接口创建线程分为以下两步
实验七 Java多线程 一、实验目的: 熟悉利用Thread类建立多线程方法。 熟悉利用Thread接口建立多线程方法...通过将扩展Thread类建立多线程的方法改为利用Runnable接口的方法,掌握通过Runnable接口建立多线程的方法。
主要介绍了java Runnable接口创建线程的相关资料,需要的朋友可以参考下
本课讲的是如何实现一个Runnable,在一个独立线程上运行Runnable.run()方法.Runnable对象执行特别操作有时叫作任务。...定义一个实现Runnable接口的类 代码如下: public class PhotoDecodeRunnable implemen
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口(csdn)————程
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。接下来通过本文给大家浅析Java中Runnable和Thread的区别,一起看看吧
使用Runnable接口创建任务类;使用Runnable接口创建任务类;使用Runnable接口创建任务类;在一个Java程序内启动多条线程;练习;使用Runnable接口创建线程时指定和取得线程名称;The Thread Class ;继承Thread类创建线程类...
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能...
java application multiThread clock,模拟时钟(AWT程序、Runnable接口),有时、分、秒针 编写一个应用程序,创建三个线程分别显示各自的时间。
下面小编就为大家带来一篇java实现多线程的两种方式继承Thread类和实现Runnable接口的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧