在我们需要实现多线程的过程中,毫无例外会用到Thread和Runnable这两个类和接口,所以,我简单的对这两个类做了一下分析,与大家分享一下
首先说说他们的共同点:
1 他们都可以实现多线程的操作, 2 他们都需要实现run方法 不同点就是他们一个是接口,而另一个是类,我们在实现多线程的时候,由于子类继承父类只能继承一个,但是可以实现多个接口,而且也可以实现资源的共享,所以我们多数采用的是实现Runnable这个接口,但是他需要创建Tread对象的start()方法来开启线程,所以说,也是各有利弊 (Thread类继承自Runnable接口) 下面,通过一段代码看看他们的不同 1Runnable 需要创建Thread对象开启线程public class Test implements Runnable{2Thread可以直接开启线程
@Override
public void run() {
System.out.println("我是runnable线程");
}
public static void main(String[] args) {
Test t = new Test();
Thread thread = new Thread(t);
thread.start();
}
}
public class Test extends Thread{关于资源共享的问题
@Override
public void run() {
System.out.println("我是thread线程");
}
public static void main(String[] args) {
Test t = new Test();
t.start();
}
}
3实现Thread类
public class Test extends Thread{结果是(没有全部粘过来)
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("我是thread线程"+i);
}
}
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
Test t3= new Test();
t1.start();
t2.start();
t3.start();
}
}
我是thread线程03实现Runnable接口
我是thread线程1
我是thread线程0
我是thread线程0
我是thread线程1
我是thread线程2
我是thread线程3
我是thread线程4
我是thread线程5
我是thread线程6
我是thread线程7
我是thread线程8
我是thread线程9
我是thread线程1
我是thread线程2
我是thread线程3
我是thread线程4
public class Test implements Runnable{@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println("我是thread线程"+i);}}public static void main(String[] args) { Test t =new Test(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); }}结果
我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程0我是thread线程1我是thread线程2我是thread线程3我是thread线程4我是thread线程5我是thread线程6我是thread线程7我是thread线程8我是thread线程9我是thread线程6我是thread线程7我是thread线程8我是thread线程9显而易见的是在用Thread实现多线程的过程中,需要我们创建多个对象,但是在实现Runnable的过程中,只需要创建一个对象,由多个线程去共享其中的资源
最后,说个题外话,除了这两个方法实现多线程以外,还有一个Callable接口可以实现多线程,但是他实现的是call方法,而且他有返回值,并且可以抛出多个异常,自处理事件等许多亮点了,但是由于他的实现特别繁琐还有其它的种种原因,现在不是很常用,所以大家了解一下就可以了