Java实现多线程的一种方式是实现Runnable接口,另一种则是继承Thread类。我们举例来说明二者的使用。
方法1:
1
2
3
4
5
6
7
|
public
class
CreateThreadTest
implements
Runnable {
public
void
run() {
System.out.println(
"线程"
+Thread.currentThread().getName()+
":开始运行"
);
}
}
|
方法2:
1
2
3
4
5
6
7
8
9
10
|
public
class
MyThread
extends
Thread {
public
MyThread(String name){
super
(name);
}
@Override
public
void
run() {
System.out.println(
"线程"
+Thread.currentThread().getName()+
":开始运行"
);
}
}
|
运行一下上述的程序:
1
2
3
4
5
6
7
8
9
10
11
|
CreateThreadTest ctt =
new
CreateThreadTest();
Thread t1 =
new
Thread(ctt,
"t1"
);
Thread t2 =
new
Thread(ctt,
"t2"
);
Thread t3 =
new
MyThread(
"t3"
);
Thread t4 =
new
MyThread(
"t4"
);
t1.start();
t2.start();
t3.start();
t4.start();
|
从运行结果上来看,线程的执行是乱序的。其原因在于,调用线程的start()方法只是使线程进入“就绪状态/可执行状态”(Runnable),而何时进入“执行状态”(Running),要看操作系统的调度。
说到两种方法的异同,Runnable接口比Thread更为常用,其主要优势在于:一个类只可以继承一个父类,如果使用了方法二,则占用了唯一的一个继承资格,不可以再继承其他类,而一个类却可以实现多个接口。其二,使用方法1,传入线程构造方法的Runnable接口实现类相同的线程,可以共享Runnable接口实现类的实例域变量资源。从JDK文档开来,Thread也是Runnable接口的一个实现。