多线程(二)


案例:存在50个香蕉,现在有请三个童鞋(小A,小B,小C)上台表演吃苹果。因为A,B,C三个人可以同时吃香蕉,此时得使用多线程技术来实现这个案例。


分析: 可以定义三个线程对象,并启动线程.每一个同学吃香蕉的时候: 先展示自己拿到手上香蕉的编号,如1,2,3,… 再吃掉香蕉(意味着苹果的总数少一个)


方式1:可以使用继承Thread方式来实现

/**
 * @Auther: guguda
 * @Date: 2019/4/18 21:02
 * @Description:
 */
 class EatBanana1 extends Thread {

        //设置香蕉的总数为50
        private int num = 50;
        
        public EatBanana1(String name){
            super(name);
        }

        @Override
        public void run() {
            for (int i = 0; i < 50; i++) {
                if(num>0){
                    System.out.println(super.getName()+"吃了编号为"+num+"的香蕉");
                    num--;
                }
            }
        }
}
public class EatBanana {
    public static void main(String[] args) {
        EatBanana1 eatBanana1 = new EatBanana1("A");
        EatBanana1 eatBanana2 = new EatBanana1("B");
        eatBanana1.start();
        eatBanana2.start();

    }
}

A吃了编号为46的香蕉
B吃了编号为39的香蕉
A吃了编号为45的香蕉
B吃了编号为38的香蕉
A吃了编号为44的香蕉
B吃了编号为37的香蕉

每个人都消费了50个香蕉

在这里插入图片描述


方式二:可以用Runnable实现

代码如下

/**
 * @Auther: guguda
 * @Date: 2019/4/18 22:05
 * @Description:
 */
class Banana implements Runnable{
    private int num =50;
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if(num > 0){
                System.out.println(Thread.currentThread().getName()+"吃了编号为"+num+"的香蕉");
                num--;
            }
        }
    }
}
public class ImplementBanana {
    public static void main(String[] args) {
        Banana banana = new Banana();
        new Thread(banana,"aa").start();
        new Thread(banana,"bb").start();
        new Thread(banana,"cc").start();

    }
}

在这里插入图片描述

继承方式:
       1):Java中类是单继承的,如果继承了Thread了,该类就不能再有其他的直接父类了.
       2):从操作上分析,继承方式更简单,获取线程名字也简单.(操作上,更简单)
       3):从多线程共享同一个资源上分析,继承方式不能做到.
实现方式:
   1):Java中类可以多实现接口,此时该类还可以继承其他类,并且还可以实现其他接口(设计上,更优雅).
   2):从操作上分析,实现方式稍微复杂点,获取线程名字也比较复杂,得使用Thread.currentThread()来获取当前线程的引用.
   3):从多线程共享同一个资源上分析,实现方式可以做到(是否共享同一个资源),在这里三个同学完成抢苹果的例子的使用实现方式才合理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值