**一、extends Thread 与 implements Runnable **
例子:
package com.Thread.implements_extends;
//实现Runnable接口
class ImplementsRunnable implements Runnable {
private int num = 0;
public void run() {
num++;
System.out.println("ImplementsRunnable: name: " + Thread.currentThread().getName()
+ " Num : " + num);
}
}
/****************************************************************************************************************/
//继承Thread
class ExtendsThread extends Thread {
private int num = 0;
public void run() {
num++;
System.out.println(
"ExtendsThread : name: " + this.currentThread().getName() + " Num : " + num);
}
}
public class implements_extends {
public static void main(String args[]) throws Exception {
//多线程共享一个对象
ImplementsRunnable imp = new ImplementsRunnable();
Thread t1 = new Thread(imp);
Thread t2 = new Thread(imp);
Thread t3 = new Thread(imp);
t1.start();
t2.start();
t3.start();
//为每一个线程创造新的实例
ExtendsThread ext1 = new ExtendsThread();
ExtendsThread ext2 = new ExtendsThread();
ExtendsThread ext3 = new ExtendsThread();
ext1.start();
ext2.start();
ext3.start();
}
}
运行结果:
ImplementsRunnable: name: Thread-0 Num : 2
ImplementsRunnable: name: Thread-2 Num : 3
ImplementsRunnable: name: Thread-1 Num : 2
ExtendsThread : name: Thread-3 Num : 1
ExtendsThread : name: Thread-4 Num : 1
ExtendsThread : name: Thread-5 Num : 1
采用继承Thread类方式:
(1)优点:编写简单,直接使用this便可访问当前线程,无需使用Thread.currentThread()方法。
(2)缺点:JAVA中不支持多重继承,所以线程类继承Thread类后便不能再继承其他父类。
采用实现Runnable接口方式:
(1)优点:可实现多个接口,还可以继承其他的类。可多个线程共享同一个目标对象,适合用于多个相同线程处理同一份资源,从而将CPU代码和数据分开,形成清晰的模型,较好地体现面向对象的思想。
(2)缺点:编程稍微复杂,访问当前线程,必须使用Thread.currentThread()方法。