Thread类和Runnable接口的区别
- 通过Thread类和Runnable接口都可以实现多线程,但是两者还是有区别的,如果一个类继承Thread类,则不适合用于多线程资源共享;而实现了Runnable接口,就可以方便的实现资源的共享。
1、继承Thread类不能资源共享
class MyThread extends Thread{private int ticket=5;public void run(){for(int i=0;i<100;i++){if(ticket>0){System.out.println(Thread.currentThread().getName()+"卖票:ticket"+ticket--);}}}
}public class ThreadDemo{public static void main(String args[]){MyThread mt1=new MyThread();MyThread mt2=new MyThread();MyThread mt3=new MyThread();mt1.start();mt2.start();mt3.start();}
}
输出结果:

以上程序通过继承Thread类实现了多线程,程序中启动了3个线程,但是3个线程却各自卖出了5张票,而不是一共卖出5张票达到资源共享的目的。
2、实现Runnable接口可以实现资源共享
class MyThread_9_7 implements Runnable{private int ticket=10;public void run(){for(int i=0;i<100;i++){if(ticket>0){System.out.println(Thread.currentThread().getName()+"买票:ticket="+ticket--);}}}
}public class RunnableDemo02 {public static void main(String[] args) {MyThread_9_7 my=new MyThread_9_7();Thread t1=new Thread(my,"t1");t1.start();Thread t2=new Thread(my,"t2");t2.start();Thread t3=new Thread(my,"t3");t3.start();}
}
输出结果:

从程序的运行结果可以清楚的发现,虽然以上程序启动了3个线程,3个线程一共才卖出10票,即ticket的属性被所有的线程对象共享。
- 结论:继承Thread类,就是多个线程各自完成自己的任务;实现Runnable接口,就是多个线程共同完成一个任务。
可见,实现Runnable接口相对于继承Thread类来说,有如下优势:
(1)适合相同程序的多个线程去处理同一资源的情况。
(2)可以避免由于Java的单继承特性带来的局限。
(3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
