线程并发问题及龟兔赛跑延时典例

线程并发问题及龟兔赛跑延时典例

并发问题

package com.xxgc.demo01;

//多个线程同时操作同一个对象
//买火车票的例子
//发现并发问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱.
//例如:不同的人买到同一张票,或者第0张票
public class TestThread4 implements Runnable {
   private int ticketNums = 10;

   @Override
   public void run() {
       while (true){
           if(ticketNums<=0){
               break;
          }
           //模拟延时
           try {
               Thread.sleep(200);
          } catch (InterruptedException e) {
               e.printStackTrace();
          }
           System.out.println(Thread.currentThread().getName()+"--->拿到了第"+ticketNums--+"张票");
      }
  }

   public static void main(String[] args) {
       TestThread4 ticket = new TestThread4();

       new Thread(ticket,"小明").start();
       new Thread(ticket,"老师").start();
       new Thread(ticket,"黄牛").start();
  }
}

龟兔赛跑-->延时处理

package com.xxgc.demo01;

//模拟龟兔赛跑
public class Race implements Runnable {
   //胜利者
   private static String winner;
   @Override
   public void run() {
       for (int i = 0; i <= 100; i++) {
           //模拟兔子睡觉
           if(Thread.currentThread().getName().equals("兔子")&& i%10==0){
               try {
                   //兔子每10步休息1毫秒
                   Thread.sleep(1);
              } catch (InterruptedException e) {
                   e.printStackTrace();
              }
          }
           //判断比赛是否结束
           boolean flag = gameOver(i);
           //如果比赛结束了,就停止程序
           if (flag){
               break;
          }
           System.out.println(Thread.currentThread().getName()+"--->跑了"+i+"步");
      }
  }
   //判断是否完成比赛
   private boolean gameOver(int steps){ //int steps //步数
       //判断是否有胜利者
       if(winner!=null){  //已经存在胜利者了
           return true;
      }
       if(steps==100) {
           winner = Thread.currentThread().getName();
           System.out.println("winner is " + winner);
           return true;
      }
       return false;
  }

   public static void main(String[] args) {
       Race race = new Race();
       new Thread(race,"兔子").start();
       new Thread(race,"乌龟").start();
  }
}

 

posted @ 2020-09-18 17:25  墨染念颖  阅读(130)  评论(0)    收藏  举报