1.Runnable更容易实现资源共享,能多个线程同时处理一个资源。
2.runable是实现而thread只能继承导致此类不能再继承其它的类了,具有一定的扩展方面的局限
虽然网上存在一些资源表示thread方式也可以实现资源共享,如下代码所示1:
public class MyThread extends Thread {
private int ticket=5;
private String name;
public MyThread(String name ){
System.out.println(name);
this.name=name;
}
@Override
public void run(){
for(int i=0;i<10;i++){
if(ticket<=5&&ticket>0){
System.out.println("线程"+name+"卖票"+i+"---"+ticket--);
}
}
}
}
main方法代码如下:
MyThread myThread=new MyThread("11");
Thread thread=new Thread(myThread);
Thread thread2=new Thread(myThread);
thread.start();
thread2.start();
事实上这种方式虽然实现了多线程之间的资源共享,不过当我们点击进去查看new Thread(myThread)带参数这种方法的实现代码会发现,其实也是通过runable去实现的,所以本质上来说并不能代表thread能很容易的实现资源共享
代码如下:
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
仔细点观察会发现此thread继承了runable的接口的
public
class Thread implements Runnable {
/* Make sure registerNatives is the first thing <clinit> does. */
private static native void registerNatives();
static {
registerNatives();
}
......
所以那些在网上说Thread也可以简单的实现资源共享的同学可以再仔细看看