线程 用Runnable 方式和 继承 Thread方式实现火车站买票

Runnable

package xianc.zhuoye;

public class zuoy2  implements  Runnable{
    /**
     *
     2. 三个窗口同时卖票 用 实现Runnable方式
     */
    static int a=20; //总票数
    static Object Obj=new Object(); 
    public static void main(String[] args) {
        zuoy2 z1=new zuoy2();
	//Runnable只需要创建一个本体类对象 
        Thread t1=new Thread(z1,"一号窗口");
        //创建thread线程
      t1.start();
        Thread t2=new Thread(z1,"二号窗口");
        t2.start();
        Thread t3=new Thread(z1,"三号窗口");
        t3.start();
    }

    @Override
    public void run() {//Runnable接口的run方法
        while (true){//无限循环
            try {
                Thread.sleep(1000);//所有线程各卖出一张票停留1000毫秒
                synchronized (Obj){//打开线程锁
                    if (a>0){
                        System.out.println(Thread.currentThread().getName()+"卖出的"+a+"号票"+"            "+a);				//Thread.currentThread().getName()打印线程名称
                        a--;
                    }else {
                        System.out.println("票已卖完");
                        System.exit(0);//关闭jvm
                    }
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

Thread

package xianc.zhuoye;

public class zuoy1 extends  Thread{
    /**
     * 1. 两个线程轮流打印数字,一直到100
     */
    static  int  a=100;
    Object O=new Object();
    public static void main(String[] args) {

        zuoy1 zuoy1=new zuoy1();
        Thread t1=new Thread(zuoy1);
        t1.start();
        zuoy1 zuoy2=new zuoy1();
        Thread t2=new Thread(zuoy2);
        t2.start();
    }

    @Override
    public void run() {
      while (true){

          try {
              Thread.sleep(1000);
              synchronized (O){
                  if (a>0){
                      System.out.println(Thread.currentThread().getName()+"           "+a);
                      a--;
                  }else {
                      System.out.println("输出完毕");
                      System.exit(0);
                  }
              }
          } catch (InterruptedException e) {
              e.printStackTrace();
          }

      }

    }
}

两者区别
Runnable 是接口。

Thread 是类,且实现了Runnable接口。
但是在程序开发中只要是多线程肯定永远以实现Runnable接口为主。

实现Runnable接口相比继承Thread类有如下好处:
1、避免继承的局限,一个类可以继承多个接口。
2、适合于资源的共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值