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

相關文章
相關標籤/搜索