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 接口" Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。下面是对 Thread 类的详细介绍: 1. Runnable 接口 Runnable 接口是 Thread 类的...
Java提供了两种主要的方式来创建线程:继承Thread类和实现Runnable接口。本篇文章将深入探讨通过实现Runnable接口来创建线程的方法,以及这种方式相比于直接继承Thread类的优势。 首先,我们来看Runnable接口。在...
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。
Java 中继承 Thread 类与实现 Runnable 接口的比较 在 Java 中,创建线程有两种方式:继承 Thread 类和实现 Runnable 接口。这些方式都可以用来创建线程,但它们之间有着一些关键的区别。 继承 Thread 类 继承 ...
在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接继承`Thread`,这时实现`Runnable`接口就成为创建线程的优选方案。...
这两种方法都可以实现阶乘计算的多线程化,主要区别在于继承`Thread`时,线程行为直接与类绑定,而实现`Runnable`接口时,线程行为是通过对象实例传递的。选择哪种方式取决于具体需求和设计考虑,例如是否需要复用类...
### 实现Runnable接口 #### 实现方式 实现`Runnable`接口的类只需要实现`run()`方法即可。这种方式不涉及类的继承,而是通过`Thread`类的构造函数传递`Runnable`对象来创建线程。 #### 优缺点 - **优点**:实现了...
在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...
### 多线程的Runnable与Thread的区别 在Java中实现多线程有两种主要方式:一种是继承`Thread`类;另一种是实现`Runnable`接口。本文将深入探讨这两种方法的区别,帮助初学者更好地理解并选择适合场景的多线程实现...
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。
Thread类与Runnable接口(处理方案示例).md
任何实现Runnable接口的类都可以被用来创建线程。 如何使用Runnable接口创建线程 使用Runnable接口创建线程的步骤如下: 1. 创建一个实现Runnable接口的类。 2. 在该类中重写run()方法,以便在线程中执行的操作。...
**一、实现Runnable接口** 1. 创建一个实现`Runnable`接口的类,如`RandomSquareRunnable`。在这个类中,我们需要重写`run()`方法,这是线程执行的主要逻辑。在这个`run()`方法里,我们可以编写绘制随机正方形的...
1. 什么是Runnable接口: 1.1 介绍Runnable接口 1.2 与Thread类的对比 2. 创建线程的方式: 2.1 继承Thread类 2.2 实现Runnable接口 3. 实现Runnable接口: 3.1 实现步骤 3.2 优点与用途 4. 启动线程: 4.1 使用...
java.Thread类与Runnable接口(处理方案示例).md
- **创建Runnable接口的实现类**:定义一个类,实现`Runnable`接口,并重写`run()`方法,这里的`run()`方法包含线程执行的具体逻辑。 - **创建Runnable实现类的实例**:通过实例化这个实现类,为后续创建`Thread`...
实现Runnable接口需要创建一个Thread类的实例,并将Runnable对象传递给Thread的构造函数。然后,调用Thread的start()方法来启动线程。 下面是一个实现Runnable接口的示例代码: ```java public static void main...
起新线程需要new一个Thread对象,将实现Runnable接口的类作为Thread构造器参数。这样才能实现起新线程。 输出效果如下所示,main是一个线程、Runner 是另一个线程。 main Thread:------0 Runner Thread:------0 ...
2. **实现Runnable接口** - **步骤**: 1. 定义一个类实现`Runnable`接口。 2. 实现`run()`方法,编写线程体代码。 3. 创建该类的实例,并将其作为参数传递给`Thread`构造函数创建`Thread`对象,然后调用`start...
Thread类和Runnable接口的主要区别在于继承性。Thread类是Java中的一个类,它不能被继承,而Runnable接口是一个接口,可以被实现。Thread类的继承性带来了局限性,无法继承其他类,而Runnable接口可以继承其他类。 ...