zoukankan      html  css  js  c++  java
  • Java并发初识

    并发初识

    案例:实现一个抢火车票的案例demo

    package com.thread;
    
    // 多线程同时操作同一个对象
    // 买火车票的例子
    
    // 发现问题:多线程操作同一个资源的情况下,线程不安全,数据紊乱
    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();
        }
    }
    
    
    黄油党拿到了第10票
    老师拿到了第8票
    小明拿到了第9票
    老师拿到了第7票
    小明拿到了第5票
    黄油党拿到了第6票
    小明拿到了第4票
    黄油党拿到了第4票
    老师拿到了第3票
    小明拿到了第2票
    黄油党拿到了第1票
    老师拿到了第0票
    

    案例:龟兔赛跑

    1. 首先来个赛道距离,然后要离终点越来越近
    2. 判断比赛是否结束
    3. 打印出胜利者
    4. 龟兔赛跑开始
    5. 故事中乌龟是赢的,兔子需要睡觉,所以我们需要来模拟兔子睡觉
    6. 终于,乌龟赢得比赛
    package com.thread;
    
    // 模拟龟兔赛跑
    public class Race implements Runnable {
        // 胜利者
        private static String winner;
    
        @Override
        public void run() {
            for (int i = 1; i <= 100; i++) {
    
                // 模拟兔子睡觉 每10步并且是兔子让它睡一会
                if (Thread.currentThread().getName().equals("兔子") && i % 10 == 0) {
                    try {
                        Thread.sleep(10);
                    } 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;
            } else {
                if (steps >= 100) {
                    winner = Thread.currentThread().getName();
                    System.out.println("胜利者是: " + winner);
                    return true;
                }
            }
    
            return false;
        }
    
        public static void main(String[] args) {
            Race race = new Race();
    
            new Thread(race, "兔子").start();
            new Thread(race, "乌龟").start();
        }
    }
    
    
  • 相关阅读:
    vue--一些预设属性
    vue--vux框架的使用
    vue--vConsole
    vue--音乐播放器
    vue--使用vue-cli构建项目
    vue--实例化对象
    vue--数据显示模版上
    CSS--交互效果
    Git SSH公钥配置
    gradle配置国内镜像
  • 原文地址:https://www.cnblogs.com/wxvirus/p/15759759.html
Copyright © 2011-2022 走看看