并发问题案例--->买火车票及龟兔赛跑

    科技2022-08-18  93

    并发问题—>买火车票

    //多个线程同时操作同一个对象 //买火车票例子 //问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱。 public class Demo04 implements Runnable { //票数 private int ticketNums = 10; @Override public void run() { while (true) { if (ticketNums <= 1) { break; } //模拟演示 try { Thread.sleep(200); //模拟延时:Thread.sleep(200); 200毫秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "--->拿到了第" + ticketNums-- + "张票"); //Thread.currentThread().getName():可以获取当前执行线程的名字 } } public static void main(String[] args) { Demo04 demo04 = new Demo04(); new Thread(demo04, "旺仔").start(); new Thread(demo04, "AD钙").start(); new Thread(demo04, "娃哈哈").start(); } }

    龟兔赛跑

    //龟兔赛跑 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 { 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) { //判断是否有胜利者 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(); } }
    Processed: 0.016, SQL: 9