前言
并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
—-以上摘自百度百科
一、龟兔赛跑案例
- 在开始并发之前,我们先来看一个好玩的案例。龟兔赛跑。
- 程序实现
- 赛道两条
- 乌龟和兔子
- 赛道长度
- 根据历史来看,需要让兔子间隔休息(因为最后兔子输了嘛)
- sleep(int) 线程休眠,参数单位是毫秒
- 代码实现案例:
public class RunGame implements Runnable{
Integer track = 100;//赛道的长度
String turtle = "乌龟";
String rabbit = "兔子";
String winner = "";//胜利者
public static void main(String[] args) {
RunGame runGame = new RunGame();
//开启兔子比赛的线程
new Thread(runGame, runGame.rabbit).start();
//开启乌龟比赛的线程
new Thread(runGame, runGame.turtle).start();
}
@Override
public void run() {
//使用Thread.currentThread().getName()获得当前的参赛者是谁
String ballplayer = Thread.currentThread().getName();
if (ballplayer.equals(rabbit)){
//模拟兔子跑步的速度,兔子跑的快,定义为每秒跑两米
for (int i=0;i<=track;i+=2){
System.out.println(rabbit+"跑了"+i+"米");
//因为兔子比较骄傲,当兔子跑到60米时,睡了一会觉,导致输掉比赛
if (i==50){
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (i>=100){
winner = rabbit;
System.out.println(winner+"赢了!!!");
}
}
}else if (ballplayer.equals(turtle)){
//模拟乌龟跑步的速度,乌龟跑的慢,定义为每秒跑一米
for (int i=0;i<=track;i++){
System.out.println(turtle+"跑了"+i+"米");
if (i>=100){
winner = turtle;
System.out.println(winner+"赢了!!!");
}
}
}
}
}
- 执行结果:
- 当兔子跑到50米时骄傲自满,睡了觉,导致比赛输掉。
- 正常情况下,兔子肯定会赢,去掉休眠即可,我就不放代码和结果上来了,感兴趣的可以自己试试~
二、商品抢购案例
-
并发的场景:
- 刷猴王雷军发售小米12,首批货源只有100台!!!100台啊!!!
- 大家知道消息后,纷纷跑来在12点首发时抢购小米12,人数共有500人!
- 手机,是肯定不够滴~
- 我们来模拟一下抢购手机的场景
-
代码实现案例:
/**
* 手机抢购案例
*/
public class PhoneSnapUp implements Runnable{
private Integer inventory = 100;//手机库存
private Integer number = 500;//抢购人数
public static void main(String[] args) {
PhoneSnapUp phoneSnapUp = new PhoneSnapUp();
//模拟500人同时抢购,即同时开启500个线程
for (int i=0;i<500;i++){
new Thread(phoneSnapUp,"丁大大"+i+"一号").start();
}
}
@Override
public void run() {
//写个死循环来模拟
while (true){
//当库存为0时,抢购结束
if (inventory <= 0){
break;
}
//模拟延迟,否则结果不容易看出来
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("恭喜!!"+Thread.currentThread().getName()+"--抢到了一台小米12!库存还剩:"+inventory+"台");
//每次抢购完,库存减1
inventory--;
}
}
}
-
执行结果如下:
-
结论:出现的问题
- 同一台手机被多人购买
- 卖出的手机远超库存量
-
通过上面的案例,可以让我们对并发有个大概的了解!这也是我们在实际开发中需要注意的东西!
Java多线程扩展:Java多线程学习汇总
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/17111.html