zoukankan      html  css  js  c++  java
  • 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

    结论:

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

  • 相关阅读:
    hdu--2578--与女孩约会
    hdu--2588--欧拉函数||容斥原理
    hdu--2586--lca_tarjan<证明tarjan这个人很流弊>
    hdu--3743--归并排序<自顶向下&&自底向上>2种写法
    hdu--4911--归并排序||树状数组
    hdu--2639--01背包第K解<不同决策的不同解法>
    hdu--2642--二维BIT
    hdu--3833--4000ms才能过的O(N^2)算法
    hdu--3835--最简单的数学..
    hdu--3836--tarjan+缩点
  • 原文地址:https://www.cnblogs.com/xiaoqiqistudy/p/10984265.html
Copyright © 2011-2022 走看看