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

 public class Web123506 implements Runnable{
private int ticteksNums=20;//票数 @Override
public void run() {
while (true){
if(ticteksNums<0){
break;
}
/* try {
//睡眠
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
System.out.println(Thread.currentThread().getName()+"-->抢到了"+ticteksNums--); }
} public static void main(String[] args) {
// 一份资源
Web123506 web = new Web123506();
//多个代理
new Thread(web,"我们").start();
new Thread(web,"你们").start();
new Thread(web,"黄牛党").start(); } }

运行结果为:

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

结论:

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

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

 public class Web123506 implements Runnable{
private int ticteksNums=20;//票数 @Override
public void run() {
while (true){
if(ticteksNums<0){
break;
}
try {
//睡眠
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"-->抢到了"+ticteksNums--); }
} public static void main(String[] args) {
// 一份资源
Web123506 web = new Web123506();
//多个代理
new Thread(web,"我们").start();
new Thread(web,"你们").start();
new Thread(web,"黄牛党").start(); } }

运行结果:

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

结论:

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

java多线程下模拟抢票的更多相关文章

  1. 进程(守护进程--互斥锁--IPC机制--生产者模型--僵尸进程与孤儿进程--模拟抢票--消息队列)

    目录 一:进程理论知识 1.理论知识 二:什么是进程? 三:僵尸进程与孤儿进程 1.僵尸进程 四:守护进程 1.什么是守护进程? 2.主进程创建守护进程 3.守护进程 五:互斥锁(模拟多人抢票) 1. ...

  2. 并发编程 - 进程 - 1.互斥锁/2.模拟抢票/3.互斥锁与join区别

    1.互斥锁: 互斥锁:Lock 原理就是把并发变成串行,一个一个运行,不错乱,但效率低 保证多个进程修改一块数据时,大家是一个一个修改,不错乱 mutex.acquire() mutex.releas ...

  3. JAVA多线程下高并发的处理经验

    java中的线程:java中,每个线程都有一个调用栈存放在线程栈之中,一个java应用总是从main()函数开始运行,被称为主线程.一旦创建一个新的线程,就会产生一个线程栈.线程总体分为:用户线程和守 ...

  4. 一个模拟——抢票部分功能的 简单版(主要实例化一下 Lock 的使用)

    """ 抢票! 多个用户在同时读写同一个数据 """ from multiprocessing import Process,Lock im ...

  5. Web Worker模拟抢票

    web worker工作原理图: 抢票系统思维导图: 思路:五个人(5个div窗口模拟)同时进行抢票,有百分之十的几率可以抢到票,抢到票后对应的窗口(即随机生成的数大于等于0小于9的情况)会编程天蓝色 ...

  6. python 并发编程 多进程 模拟抢票

    抢票是并发执行 多个进程可以访问同一个文件 多个进程共享同一文件,我们可以把文件当数据库,用多个进程模拟多个人执行抢票任务 db.txt {"count": 1} 并发运行,效率高 ...

  7. 《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端

    1.Socket简介 在网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个 ...

  8. 多线程(模拟买票)-----java基础知识总结

    这次的的问题引入的比较深入,如果看了这篇博客,不看下一篇,你会很懵逼. 代码: package com.day13.math; /** * 类说明 :模拟三个窗口同时售票 * @author 作者 : ...

  9. Java 多线程下的单例模式

    单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.正是由于这个特 点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证 ...

随机推荐

  1. Spring mvc之SimpleUrlHandlerMapping

    1.配置文件如下 <bean id="method" class="com.xx.controller.xxxController" scope=&quo ...

  2. canvas跟随页面滑动后准确定位到真实坐标

    先来了解一个属性: getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bottom.分别表示元素各边与页面上边和左边的距离. var ...

  3. 实时更新数据的jQuery图表插件DEMO演示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Spring的AOP AspectJ切入点语法详解(转)

    一.Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示 ...

  5. windows下开发PHP扩展dll(无需Cygwin)

    windows下开发php扩展网上很多资料都说需要Cygwin,其实完全可以不必安装该东东.没错,是可以在linux下生成骨架后拷到windos下来用,但是,如果没有linux环境呢?什么,装虚拟机? ...

  6. 图解TCP/IP第五版 -- 文件夹

    非常多年前买过<TCP/IP具体解释>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是.买了太多的书,基本都没看,搬家搬来搬去的麻 ...

  7. LightRoom操作快捷键

    1.隐藏与释放上下左右面板:F5.F6.F7.F8.分别对应上下左右面板.tab键可以隐藏与释放左右面板,shift+table可以同时隐藏与释放所有面板,T键隐藏与显示工具栏 2.图库与修改照片模块 ...

  8. JVM原理及内存溢出

    JVM原理及内存溢出

  9. sdk manager 创建的虚拟机启动的时候总是在Android字样解决

    一直显示Android字样.仅仅须要删除文件夹下的snapshots.img 找到sdk的文件夹下的\tools\lib\emulator,然后删除上面的文件snapshots.img就可以,我的sd ...

  10. Nuget公布Dll

    今天要開始写ViewModel了,写完之后系统里的ViewModel都汇总到我这里.然后由我负责ViewModel的公布跟维护,所以Nuget公布Dll就要熟练啦~ 一,安装工具 1.Nuget Pa ...