java中的通过继承Thread和实现Runnable接口实现的线程

/*
 *本案例要实现的功能是四个售票点再卖票
 *2、实现runnable的好处
 *<1>正如本案例:处理同一资源的多个线程代码一般情况下就是实现runnable接口
 *<2>如果你继承的Thread类来实现多线程,那么就不可以继承其他的类了
 *<3>如果你创建的实现线程的类要通过构造函数传递参数,那么是实现的Thread类肯定不可能实现这个功能
 *但是你如果实现的是Runnable接口就可以,而且大多数情况下实现多线程都是用Runnable接口,综上所需
 *我们最好使用Runnable接口
 */
class  LessonTestDemo1
{
 public static void main(String [] args)
 {
  //这样去开启线程那么我们的四个售票点就都会售出100张票
  /*new LessonDemo2().start();
  new LessonDemo2().start();
  new LessonDemo2().start();
  new LessonDemo2().start();*/
  //这种方式开启的线程实际上就一个售票点再售票
  /*Thread tt = new LessonDemo2();
  tt.start();
  tt.start();
  tt.start();
  tt.start();*/
  //一般想这种多个程序代码线程去处理同一个资源的情况,就是实现runnable接口
  LessonDemo2 rr = new LessonDemo2();//这是买票同一资源
  //下面是开启四个线程去卖同一资源的票
  //这是第一个售票点卖票
  Thread tt1 = new Thread(rr);
  tt1.start();
  //这是第二个售票点卖票
  Thread tt2 = new Thread(rr);
  tt2.start();
  //这是第三个售票点卖票
  Thread tt3 = new Thread(rr);
  tt3.start();
  //这是第四个售票点卖票
  Thread tt4 = new Thread(rr);
  tt4.start();
 }
}
//这是一个卖票的线程
class LessonDemo2 implements Runnable
{
 private int tickets = 100;
 //如果一个类实现了runnable接口,那么这个类也可以实现多线程,只不过,当开启这个线程的时候
 //我们执行的不是Thread的start方法,而是我们的runnable接口的run方法
 public void run()
 {
  while(true)
  {
   if(tickets > 0)
   {
    System.out.println(Thread.currentThread().getName() + " is saling a ticket " + tickets--);
   }
  }
 }
}
//下面是易出错的几种形式
//这是一个卖票的线程
/*class LessonDemo2 extends Thread
{
 private int tickets = 100;
 //如果一个类实现了runnable接口,那么这个类也可以实现多线程,只不过,当开启这个线程的时候
 //我们执行的不是Thread的start方法,而是我们的runnable接口的run方法
 public void run()
 {
  if(tickets > 0)
  {
   System.out.println(Thread.currentThread().getName() + " is saling a ticket " + tickets--);
  }
 }
}*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值