as we know,java能夠經過兩種方式建立線程,一種是經過繼承Thread類,另外一種則是經過實現Runnable接口。
java
那麼,這二者之間的區別有哪些呢?.
線程
Thread因爲是經過繼承的方式,java又是單繼承,因此只能有一個實現,而Runnable則由於是接口,則能夠有多個實現。code
實現Runnable的線程類,能夠在多個線程實例之間共享數據。繼承
下面經過賣票的例子來舉例接口
繼承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