版权声明:本博文仅供学习、参考、技术讨论,版权归笔者/译者所有。 https://blog.csdn.net/qq_38025219/article/details/84313085
描述:
实现Runnable方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
实例:
package root;
/**
* 2018/11/21.
*/
public class saleRunnable {
public static void main(String [] args){
Ticket ticket=new Ticket();
Thread A1=new Thread(ticket,"第一个窗口");
Thread A2=new Thread(ticket,"第二个窗口");
Thread A3=new Thread(ticket,"第三个窗口");
A1.start();
A2.start();
A3.start();
}
}
class Ticket implements Runnable{
private int Numbers=10;
private int getNumbers(){
return Numbers;
}
public void SellTicket(){
this.Numbers--;
}
@Override
public void run(){
while(getNumbers()>0) {
synchronized (this) {
if (getNumbers() > 0) {
SellTicket();
System.out.println(Thread.currentThread().getName() + "卖了一张票:剩余票数" + getNumbers());
try{
Thread.sleep(500);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
}
}
运行结果:
每一次运行结果都是有差异的,截取一次测试结果如下