Java中Runnable和Thread的区别

来源:互联网 发布:广西旅游数据统计 编辑:程序博客网 时间:2024/05/05 03:38

我们都知道Thread是继承,Runnable是接口

用的时候继承Thread或者实现Runnable接口,继承只能单继承,接口可以实现多个

第一种继承Thread

public class MThread extends Thread{   public int sum=30; @Overridepublic void run() { int i; for (i = 0; i < 10; i++) {sum--;} System.out.println(sum); System.out.println(Thread.currentThread().getName()); }public static void main(String[] args) {MThread m1=new MThread();m1.start(); m1.run();}}

打印结果:

20main10Thread-0

这个结果就说明啦run方法和start方法的区别

那就是 执行时所在的线程不同,这个大家切记


第二种方法

public class MRunnable implements Runnable{   public int sum=30;@Overridepublic void run() {// TODO Auto-generated method stub int i; for (i = 0; i < 10; i++) {sum--;} System.out.println(sum); System.out.println(Thread.currentThread().getName()); }public static void main(String[] args) {    Thread m1=new Thread(new MRunnable());m1.start();m1.run();}}


打印结果:

20main10Thread-0

结果跟上一个一致

但是两个之间还是有很大的差距


把一个main方法改成:

public static void main(String[] args) {MThread m1=new MThread();m1.start();  MThread m2=new MThread();MThread m3=new MThread();m2.start();m3.start();}
输出结果:

20Thread-220Thread-020Thread-1

也把第二个方法改:

</pre><pre code_snippet_id="1826232" snippet_file_name="blog_20160812_8_2808312" name="code" class="java">public static void main(String[] args) {MRunnable mr=new MRunnable();    Thread m1=new Thread(mr);m1.start();Thread m2=new Thread(mr);Thread m3=new Thread(mr);m2.start();m3.start();}


结果为:

20Thread-210Thread-10Thread-0

那么实现runnable接口是可以实现多线程数据共享的,
而继承Thread,多线程间数据是独立的


所以我们必须认识到start方法和run方法的区别

必须认识到 Thread和实现runnable接口的区别

0 0
原创粉丝点击