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