现在的位置: 首页 > 综合 > 正文

Java 多线程卖票演示

2013年08月23日 ⁄ 综合 ⁄ 共 1092字 ⁄ 字号 评论关闭

 

class Ticket implements Runnable
{
	private int tick=100;
	//
	/*public void run()
	{
		while(tick>0)
		{
			try{Thread.sleep(10);}catch(Exception ex) {}
			 //当现在tick=1时,而所有线程都在这个地方停止了,那么这时就会出现 tick < 0 的情况 ,这就是多线程情况 的安全性问题
			System.out.println(Thread.currentThread().getName()+"..."+tick--);
		}
	}*/
	public  void run()
	{
		while(true)   //循环是指线程不停的去卖票
		{
			synchronized(this)//当操作的是共享数据时, 用同步代码块进行包围起来,这样在执行时,只能有一个线程执行同步代码块里面的内容
			{
				if(tick>0)
				{
					//try{Thread.sleep(10);}catch(Exception ex) {}在同步代码块里面睡觉,给不睡效果是一样 的,作用只是自已不执行,也不让线程执行
					System.out.println(Thread.currentThread().getName()+"..."+tick--);
				}else
					break;
				}
			try{Thread.sleep(100);}catch(Exception ex) {}//所以把睡觉放到同步代码块的外面,这样卖完一张票就睡一会,让其他线程再卖,这样所有的线程都可以卖票
		}
	}
}

public class Sale {


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

}
/*
 * 	多线程出现的安全性问题:
 * 			在操作共享数据时,一条语句在没有执行完的情况下,另外一语句参与进行,就会再现错误
 *   解决办法 :
 * 	    在多条语句操作共享数据时, 在一个操作共享数据的语句没有执行时,不能让其他的线程进来
 * 
 * 		Java中提供了同步代码块:
 * 				synchronized(对象)
 * 					{
 * 					}
 *     注意:
 *     		不要同步代码块里面睡觉,这样会造成自己不执行,也不让其他线程执行的后果 
 *     
 *     多线程 卖票: 创建多个线程,共同卖票
 * 
 * 
 * */													2011/10/24  11:4:49

抱歉!评论已关闭.