java实现多线程有两种方法
1、继承Thread类
2、实现Runnable接口
两种实现方式的共同点:
不论用哪种方法,都必须用Thread(如果是Thead子类则用它本身)产生线程,然后再调用start()方法。
两种实现方式的不同点:
1、继承Thread类只能是单继承,而实现Runnable接口则可以实现多继承(即如果有一个类,它已继承了某个类,又想实现多线程,那就可以通过实现Runnable接口来实现。)
2、实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。(把一个实现了Runnable接口的对象作为参数产生一个Thread对象,再调用Thread对象的start()函数就可执行并行操作。如果在产生一个Thread对象时以一个Runnable接口的实现类的对象作为参数,那么在调用start()函数时,start()会调用Runnable接口的实现类中的run()函数。)
3.另外,使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装。
注:很多情况下使用第二种实现方式的多点
以下是两种方式的简单实现小例子:
//方法一,继承Thread类
class MyThread extends Thread {
public void run(){
for ( int i = 0; i < 5; i++ ){
System.out.println("num "+ i+":"+Thread.currentThread().getName());
}
}
}
public class ThreadDemo1{
public static void main(String[] args){
for ( int i = 0; i < 3; i++ ){
MyThread tt = new MyThread();
tt.start();
}
}
}
//方法二,实现Runnable接口
class MyThread2 implements Runnable{
public void run(){
for ( int i = 0; i < 5; i++ ){
System.out.println("num "+ i+":"+Thread.currentThread().getName());
}
}
}
public class ThreadDemo2 {
public static void main(String[] args) {
MyThread2 mt = new MyThread2();
for ( int i = 0; i < 3; i++ ){
Thread tt = new Thread(mt);
tt.start();
}
}
}