Runable与Thread的区别

as we know,java能够经过两种方式建立线程,一种是经过继承Thread类,另外一种则是经过实现Runnable接口。
java

那么,这二者之间的区别有哪些呢?.
线程

  1. Thread因为是经过继承的方式,java又是单继承,因此只能有一个实现,而Runnable则由于是接口,则能够有多个实现。code

  2. 实现Runnable的线程类,能够在多个线程实例之间共享数据。继承


下面经过卖票的例子来举例接口

  1. 继承Thread类get


com.sunsharing.thread;

MyThread Thread {
    = ;
    String ;
    MyThread(String name){
        .= name;
    }
    run(){
        (>){
            --;
            System..println(++);
        }
    }
}

调用
thread

com.sunsharing.thread;

MyThread Thread {
    = ;
    String ;
    MyThread(String name){
        .= name;
    }
    run(){
        (>){
            --;
            System..println(++);
        }
    }
}

结果:d3

窗口2卖出了一张票,还剩4数据

窗口2卖出了一张票,还剩3co

窗口2卖出了一张票,还剩2

窗口2卖出了一张票,还剩1

窗口1卖出了一张票,还剩4

窗口3卖出了一张票,还剩4

窗口3卖出了一张票,还剩3

窗口3卖出了一张票,还剩2

窗口3卖出了一张票,还剩1

窗口3卖出了一张票,还剩0

窗口1卖出了一张票,还剩3

窗口1卖出了一张票,还剩2

窗口1卖出了一张票,还剩1

窗口2卖出了一张票,还剩0

窗口1卖出了一张票,还剩0


能够看出经过Thread类并无共享数据,每一个线程都有5张票



若是使用Runnable则不会出现这种状况,代码以下:

MyRunable Runnable{
    = ;
    run() {
        (>){
            --;
            System..println(Thread.().getName()++);
        }
    }
}
MyRunable runable = MyRunable();
Thread thread1 = Thread(runable,);
Thread thread2 = Thread(runable,);
Thread thread3 = Thread(runable,);
thread1.start();
thread2.start();
thread3.start();


结果以下:

窗口2卖出了一张票,还剩3

窗口2卖出了一张票,还剩1

窗口2卖出了一张票,还剩0

窗口3卖出了一张票,还剩2

窗口1卖出了一张票,还剩2

相关文章
相关标签/搜索