`

133_多线程(售票的例子)

 
阅读更多
/*
需求:简单的买票程序
多个窗口卖票
*/

class TWindow extends Thread{
	private static int tickNum = 100;//此处若不加static,则每个对象都可以售100张票,但是加static,tickNum的生命周期就很长
	public void run(){
		while(true){
			if(tickNum >0){
				System.out.println(Thread.currentThread().getName()" sale: "+ tickNum--);
			}
		}
	}
}

class Ticket{
	public static void main(String[] args){
		TWindow t1 = new TWindow();
		TWindow t2 = new TWindow();
		TWindow t3 = new TWindow();
		TWindow t4 = new TWindow();
		
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

class TWindow extends Thread{
	private int tickNum = 100;//此处若不加static,只创建一个线程,四次开启运行线程
	//会出现错误。可以用运动员跑步,start()为司令官发枪。第一次发枪,运动员跑出去了,第二次发枪,第三次发枪,第四次发枪。后面的发枪没意义。
	//会提示线程状态出问题了。
	public void run(){
		while(true){
			if(tickNum >0){
				System.out.println(Thread.currentThread().getName()" sale: "+ tickNum--);
			}
		}
	}
}

class Ticket{
	public static void main(String[] args){
		TWindow t1 = new TWindow();
		//TWindow t2 = new TWindow();
		//TWindow t3 = new TWindow();
		//TWindow t4 = new TWindow();
		
		t1.start();
		t1.start();
		t1.start();
		t1.start();
	}
}

解决方法:通过另一种创建线程的方式。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics