码迷,mamicode.com
首页 > 编程语言 > 详细

Java中的多线程 模拟网络抢票代码

时间:2017-09-27 00:49:51      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:测试   ati   gen   http   exception   ble   bit   img   count   

一、抢票类:

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 + "张票");
			}
		}
	}

	 

}

  效果如下:

技术分享

 

Java中的多线程 模拟网络抢票代码

标签:测试   ati   gen   http   exception   ble   bit   img   count   

原文地址:http://www.cnblogs.com/xiaobudong/p/7599470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!