Java并发初识
2022/1/3 17:10:33
本文主要是介绍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票
案例:龟兔赛跑
- 首先来个赛道距离,然后要离终点越来越近
- 判断比赛是否结束
- 打印出胜利者
- 龟兔赛跑开始
- 故事中乌龟是赢的,兔子需要睡觉,所以我们需要来模拟兔子睡觉
- 终于,乌龟赢得比赛
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(); } }
这篇关于Java并发初识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?