zoukankan      html  css  js  c++  java
  • Java中的多线程 模拟网络抢票代码

    一、抢票类:

    package cn.jbit.ticket;
    
    public class Ticket implements Runnable {
    
    	private int num = 0; // 出票数
    	private int count = 10; // 剩余票数
    
    	boolean flag = false;
    
    	@Override
    	public void run() {
    
    		while (true) {
    
    			// 没有余票时,跳出循环
    			if (count <= 0) {
    				break;
    			}
    			num++;
    			count--;
    
    			try {
    				Thread.sleep(500);// 模拟网络延时
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			System.out.println("显示出票信息:" + Thread.currentThread().getName()
    					+ "抢到第" + num + "张票,剩余" + count + "张票");
    
    		}
    	}
    
    	 
    
    }
    

      

    二、测试类:

    package cn.jbit.ticket;
    
    public class Test {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    
    		Ticket ticket=new Ticket();
    		//  实例化几个抢票用户
    		Thread mary = new Thread(ticket, "玛丽");
    
    		Thread jack = new Thread(ticket, "杰克");
    
    		mary.start();
    
    		jack.start();
    
    	}
    }
    

      不使用线程同步的代码,结果如下:多个人会抢到同一张票

       使用线程同步的话,代码如下:

    package cn.jbit.ticket;
    
    public class Ticket implements Runnable {
    
    	private int num = 0; // 出票数
    	private int count = 10; // 剩余票数
    
    	boolean flag = false;
    
    	@Override
    	public void run() {
    
    		while (true) {
    			synchronized (this) {
    
    				// 没有余票时,跳出循环
    				if (count <= 0) {
    					break;
    				}
    				num++;
    				count--;
    
    				try {
    					Thread.sleep(500);// 模拟网络延时
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				System.out.println("显示出票信息:" + Thread.currentThread().getName()
    						+ "抢到第" + num + "张票,剩余" + count + "张票");
    			}
    		}
    	}
    
    	 
    
    }
    

      效果如下:

  • 相关阅读:
    搭建企业级Docker Registry -- Harbor
    搭建私服-docker registry
    CentOS 7.2修改网卡名称
    tomcat错误日志监控脚本
    Openresty+Lua+Redis灰度发布
    Jenkins权限控制-Role Strategy Plugin插件使用
    Rsyslog日志服务搭建
    awk4.0对数组value排序
    Spring-IOC 在非 web 环境下优雅关闭容器
    Spring-IOC bean 生命周期之 Lifecycle 钩子
  • 原文地址:https://www.cnblogs.com/xiaobudong/p/7599470.html
Copyright © 2011-2022 走看看