多线程练习题

* 有100份礼物,小明,小红两个人同时发送,当剩下礼品小于10份的时候则不再送出,利用多线程模拟该过程并将线程的名称
* 打印出来。并最后在控制台分别打印小红,小明各自送出多少份礼物

public class Test {
     public static void main(String[] args) throws Exception {
          //创建一个礼物集合
          List<String> gifts = new ArrayList<>();
          //定义一些礼物的名字
          String[] names = {"玫瑰花","零食","UFC腰带","毛绒玩具","篮球","钢笔"};
          Random r = new Random();
          //随机定义100个礼物,带上编号
          for (int i = 1; i <= 100; i++) {
               gifts.add(names[r.nextInt(names.length)] + i);
          }
          //创建小红,小明线程
          ThreadT xm = new ThreadT(gifts,"小明");
          xm.start();
          ThreadT xh = new ThreadT(gifts,"小红");
          xh.start();

          xm.join();
          xh.join();

          System.out.println("--小明送出了" + xm.getCount() + "件礼物--");
          System.out.println("--小红送出了" + xh.getCount() + "件礼物--");


     }
}
public class ThreadT extends Thread{
     private final List<String> gifts;
     private int count;
     public int getCount() {
          return count;
     }

     public void setCount(int count) {
          this.count = count;
     }

     public ThreadT(List<String> gifts,String name) {
          super(name);
          this.gifts = gifts;
     }

     @Override
     public  void run() {
          String threadName = Thread.currentThread().getName();
          Random r = new Random();
               while(true) {
                    synchronized (this) {
                         if (gifts.size() < 10) {
                              break;
                         }
                         String giftName = gifts.remove(r.nextInt(gifts.size()));
                         System.out.println(threadName + "送出" + giftName);
                         count++;
                    }
               }
     }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值