模拟售票,学习多线程

Posted ihrthk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟售票,学习多线程相关的知识,希望对你有一定的参考价值。

假设有火车票100张,创建10个线程模拟10个售票点,每个售票点随机生成时间卖一张票。 打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。

import java.text.SimpleDateFormat;
import java.util.Date;

public class Resource 

	int ticketNum;
	boolean flag = false;
	SimpleDateFormat sdf;

	int i = 1;

	public Resource(int ticketNum) 
		this.ticketNum = ticketNum;

		sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
	

	public synchronized void sellTicket(Seller s) 
		if (i <= ticketNum) 
			System.out.println("在" + sdf.format(new Date()) + " 第" + s.num
					+ "售票点卖了第" + i + "张票...");
			i++;

		 else 
			flag = true;
		
	



public class Seller implements Runnable 

	int num;
	Resource rs;

	public Seller(int num, Resource rs) 
		super();
		this.num = num;
		this.rs = rs;
	

	@Override
	public void run() 
		// TODO Auto-generated method stub
		while (rs.flag == false) 
			// 调用资源类的同步方法
			rs.sellTicket(this);
			try 
				// 生成随机数(范围1-1000)
				int random = (int) (Math.random() * 1000);
				Thread.sleep(random);
			 catch (InterruptedException e) 
				// TODO Auto-generated catch block
				e.printStackTrace();
			
		
	



public class Test 

	/**
	 * @param args
	 */
	public static void main(String[] args) 
		// TODO Auto-generated method stub
		Resource rs = new Resource(100);
		for (int i = 0; i < 10; i++) 
			Thread t = new Thread(new Seller(i, rs));
			t.start();
		
	




以上是关于模拟售票,学习多线程的主要内容,如果未能解决你的问题,请参考以下文章

java 22 - 11 多线程之模拟电影院售票口售票

多线程练习(简单模拟火车站多窗口同时售票)

Java多线程实现简单的售票程序

多线程:多线程的应用(网图下载模拟售票龟兔赛跑)

多线程:多线程的应用(网图下载模拟售票龟兔赛跑)

模拟售票程序(关于多线程共享的练习)