码迷,mamicode.com
首页 > 其他好文 > 详细

3.用Thead子类实现车站购票的一个场景(static关键字)

时间:2017-07-29 10:26:40      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:表示   run   this   自己的   string   java   img   号码   ext   

技术分享

如上图所示,我们这里模拟一下去车站买票的情形:这里有3个柜台同时售票,总共是1000张票,这三个柜台同时买票,但是只能一个柜台卖同一张票,也就是说1号票卖了之后我们就只能买2号票,2号票卖了之后我们只能买3号票!依次类推!直到卖完这1000张票,然后再从头开始卖票!如下代码演示:

package com.bawei.multithread;
//这里模拟售票窗口
public class TicketWindow extends Thread {
	//柜台名称,表示第几个柜台
	private final String name;
	//定义一个变量,模拟最多有这1000张票,这里之所以要用static关键字,主要是因
	//为不想在线程创建对象的时候,每个线程都有一份自己的实例变量,而是想让我们这里所
	//有的线程懂共享同一份数据,也就是只让这个变量初始化一次,所以这里设置为静态变量
	private static final int MAX=1000;
	//给定一个初始化变量,从第一张票开始卖,static同上
	private static  int index =1;
	
	public TicketWindow(String name) {
		this.name = name;
	}



	@Override
	public void run() {
		while(index <= MAX){
			System.out.println("当前柜台是"+name+", 所售号码是"+(index++));
		}
	}
	
}

 上面这个类是Thead的子类,模拟售卖票的窗口,这里面控制着唯一资源票,而且这个票是被几个窗口所共享的,所以这里我们定义成了static的!

package com.bawei.multithread;

public class Station {
	public static void main(String[] args) {
		//这里我们创建了三个线程,来模拟3个柜台!
		TicketWindow  ticketWindow1 = new TicketWindow("1号柜台");
		ticketWindow1.start();
		
		TicketWindow  ticketWindow2 = new TicketWindow("2号柜台");
		ticketWindow2.start();
		
		TicketWindow  ticketWindow3 = new TicketWindow("3号柜台");
		ticketWindow3.start();
	}
}

 这个类就是车站类,在这个类中我们创建了3个TicketWindow对象,用这三个对象来模拟3个售票窗口同时售票的情形! 

 

注意:这里有一个问题,就是票是static的,是被多个线程对象所共享的,资源是唯一的,但是static修饰变量的生命周期是很长的,因为它不是随着类的消亡而消亡,这个变量一旦被JVM加载到内存中,它是有一个单独的区域来存放这个变量的,它的生命周期比类的生命周期可能还要长!当然这这只是一个粗糙版本的售票系统!我们下面会用代码给大家演示,如何友好的,将线程和业务分离开来的一个方式!

 

3.用Thead子类实现车站购票的一个场景(static关键字)

标签:表示   run   this   自己的   string   java   img   号码   ext   

原文地址:http://www.cnblogs.com/python-machine/p/7253415.html

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