实现Runnable接口相对于继承Thread类的优点

本文介绍了一个使用Java实现的简单示例,通过一个共享变量在多个线程间被访问来展示线程安全问题。该示例展示了如何利用Runnable接口创建线程,以及当多个线程共享同一资源时可能发生的竞争条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 适合多个相同程序代码的线程去处理同一个资源
  2. 可以避免由于Java的单继承性带来的局限性
  3. 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。

      线程对象在实例化的时候只能实例化一个对象

/**定义一个线程

*/   

 class  MyThread implements Runable{

      private int ticket=5;//票的数量为5

      public void run(){//覆写run方法

      for(int i=0;i<100;i++){//定义一个超过票数的循环

           if(ticket>0){

                         System.out.println("卖票了,ticket="+ticket);//还有显示有票的数量

                   }

          }

    }

}

/**验证上面线程中ticket被共享

*/

class   MyThreadTest{

      public static void main(String []args){

                MyThread a=new MyThread();//实例化线程对象

                 //启动两个线程对象去,发现票数据被共享

                new Thread(a).start();//启动第一个线程对象

                new Thread(a).start();//启动第二个线程对象

               /*如果实例化两个对象,比如实例化a再实例化一个b你会发现没有,两个不同的线程没有共享ticket

                 但是如果MyThread是继承Thread类而不是实现接口Runnable,上面的代码将报错。*/

          }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值