• java多线程下模拟抢票


    我们设置三个对象分别同时抢20张票,利用多线程实现.

     1 public class Web123506 implements Runnable{
     2   private int ticteksNums=20;//票数
     3 
     4     @Override
     5     public void run() {
     6      while (true){
     7          if(ticteksNums<0){
     8              break;
     9          }
    10         /* try {
    11              //睡眠
    12              Thread.sleep(200);
    13          } catch (InterruptedException e) {
    14              e.printStackTrace();
    15          }*/
    16          System.out.println(Thread.currentThread().getName()+"-->抢到了"+ticteksNums--);
    17 
    18      }
    19     }
    20 
    21     public static void main(String[] args) {
    22            // 一份资源
    23         Web123506 web = new Web123506();
    24         //多个代理
    25         new Thread(web,"我们").start();
    26         new Thread(web,"你们").start();
    27         new Thread(web,"黄牛党").start();
    28 
    29     }
    30 
    31 }

    运行结果为:

    我们-->抢到了20
    黄牛党-->抢到了18
    你们-->抢到了19
    黄牛党-->抢到了16
    我们-->抢到了17
    黄牛党-->抢到了14
    你们-->抢到了15
    黄牛党-->抢到了12
    我们-->抢到了13
    黄牛党-->抢到了10
    你们-->抢到了11
    黄牛党-->抢到了8
    我们-->抢到了9
    黄牛党-->抢到了6
    你们-->抢到了7
    黄牛党-->抢到了4
    我们-->抢到了5
    黄牛党-->抢到了2
    你们-->抢到了3
    黄牛党-->抢到了0
    我们-->抢到了1

    结论:

    我们可以看到抢到的票没有重复的,说明线程是安全的.

    这时候我们加入线程的睡眠.观察线程此时是不是安全的?

     1 public class Web123506 implements Runnable{
     2   private int ticteksNums=20;//票数
     3 
     4     @Override
     5     public void run() {
     6      while (true){
     7          if(ticteksNums<0){
     8              break;
     9          }
    10          try {
    11              //睡眠
    12              Thread.sleep(200);
    13          } catch (InterruptedException e) {
    14              e.printStackTrace();
    15          }
    16          System.out.println(Thread.currentThread().getName()+"-->抢到了"+ticteksNums--);
    17 
    18      }
    19     }
    20 
    21     public static void main(String[] args) {
    22            // 一份资源
    23         Web123506 web = new Web123506();
    24         //多个代理
    25         new Thread(web,"我们").start();
    26         new Thread(web,"你们").start();
    27         new Thread(web,"黄牛党").start();
    28 
    29     }
    30 
    31 }

    运行结果:

    黄牛党-->抢到了20
    我们-->抢到了19
    你们-->抢到了18
    黄牛党-->抢到了17
    我们-->抢到了16
    你们-->抢到了15
    黄牛党-->抢到了14
    我们-->抢到了13
    你们-->抢到了12
    你们-->抢到了11
    我们-->抢到了10
    黄牛党-->抢到了9
    你们-->抢到了8
    我们-->抢到了7
    黄牛党-->抢到了6
    你们-->抢到了5
    我们-->抢到了4
    黄牛党-->抢到了3
    你们-->抢到了2
    我们-->抢到了1
    黄牛党-->抢到了0
    你们-->抢到了-1
    我们-->抢到了-1

    结论:

    当我们加入线程的睡眠,此时抢到的票可能出现了负数或者会出现两个人抢到了同一张票此时说明加入线程睡眠线程是不安全的.

  • 相关阅读:
    机器学习---算法---K-近邻算法
    机器学习---算法---逻辑回归
    进程线程---简单解释
    【codecs】音视频编解码开源项目大汇总
    【life】选择程序员,就是选择一种生活
    【PE】逆向工程(反编译)
    【OpenSource】开源管理平台BlackDuck简介
    【Analysis】开源工程Binwalk:固件分析利器
    【Tools/VS】VS2010 代码块快速折叠快捷键
    【Audio】开源音频库G711和MP3Dec网址
  • 原文地址:https://www.cnblogs.com/xiaoqiqistudy/p/10984265.html
Copyright © 2020-2023  润新知