⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buyerlockticket.java

📁 为了解决线程对共享资源访问的不确定性
💻 JAVA
字号:
class Ticket
{
	final int MAX = 300;			
	private int value=MAX;			//当前可售票数
	void resetData(int count){		//刷新数据库
		value = value - count;		//可售票数减去已售票数
	}
	void getTicket(int count){		//买票,返回票号
		int no = 0;
		if(value<=0){
			System.out.println("票已售完");
		}
		else{
			if(count>value){
				System.out.println("最多可购买票" + value + "张 票号: ");
				for(int i=0; i<value; i++){	//输出要买的票号
					System.out.print("\t" + (1000 + value - i));
				}
			}
			else{
				System.out.println("买票" + count + "张 票号:");
				for(int i=0; i<count; i++){//输出要买的票号
					System.out.print("\t" + (1000+value-i));
				}
			}
		}
	}
	int howmuch(){		//得到当前可售票数
		return value;
	}
}
public class BuyerLockTicket extends Thread //买票
{
	private Ticket t;
	private int count;		//已售票数
	int no;
	public BuyerLockTicket(Ticket t, int count){
		this.t = t;
		this.count = count;
	}

	public void run(){
		synchronized(t){	//对象互斥锁,锁定帐户对象
			System.out.print("\n现有" + t.howmuch() + "张 ");
			t.getTicket(count);		//实现买票
			try{
				sleep(10);			//休眠10mm,
			}catch(InterruptedException e){
				System.out.println(e);
			}
			t.resetData(count);		//刷新数据库,这步非常重要
		}
	}

	public static void main(String []args){
		Ticket t1 = new Ticket();
		(new BuyerLockTicket(t1,3)).start();	//启动线程
		(new BuyerLockTicket(t1,5)).start();
		
	}
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -