1:Thread不能实现线程之间变量资源共享,Runnable则可以
2:Thread是类(是类当然就是单继承),Runnable是接口(接口可以多实现)
Thread
//使用Thread实现线程不能实现资源共享 class MyThread extends Thread { private int ticket=5; private String name; public MyThread(String name ){ this.name=name; } public void run(){ for(int i=0;i<10;i++){ if(ticket>5){ System.out.println("线程"+name+"卖票"+i); } } } } public class ThreadDemo02 { public static void main(String args[]){ // 这里我们new了线程A,B是两个实例,所以不能实现资源(ticket)共享 MyThread A = new MyThread("A"); MyThread B = new MyThread("B"); A.start(); B.start(); } }
Runnable
//使用Runnable实现线程可以实现资源共享 class MyThread implements Runnable { private int ticket=5; private String name; public MyThread(String name){ this.name=name; } public void run(){ for(int i=1;i<=10;i++){ if(ticket>0){ System.out.println("线程"+name+"卖票"+(ticket--)); } } } } public class RunnableDemo02 { public static void main(String args[]){ MyThread A = new MyThread("A"); //实例化线程要执行的任务 Thread Ta = new Thread(A); //实例两个线程对象,实际传递的是一个任务 Thread Tb = new Thread(A); //因为两个线程执行的是一个任务,所以资源(ticket)是共享的 Ta.start(); Tb.start(); } }
以下文章可以进行详细参考: