您的位置:首页 > 编程语言 > Java开发

Java线程同步synchronized

2013-07-26 19:54 369 查看
三个窗口卖票的程序。

多线程共同操作一个对象的变量。锁是对象级别的,一个被synchronized修饰的代码块或方法一个时刻只能被一个线程执行。

package fire;

public class Seller1 extends Thread{
	Ticket t = null;
	
	public Seller1(Ticket t){
		this.t=t;
	}
	public void run(){
		int count=0;
		for(int i=0;i<50;i++){
			if(Ticket.tickets<=0)
				break;
			
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized(t){
				--Ticket.tickets;
				if(Ticket.tickets>=0){
//				System.out.println("剩余票数:"+Ticket.tickets+"张票"+"  窗口1卖出第"+Ticket.tickets+"张票");
				System.out.println("剩余票数:"+(Ticket.tickets+1)+"张票 "+Thread.currentThread().getName()+"卖出第"+(Ticket.tickets+1)+"张票");
				count++;
				}
			}
		}
		System.out.println("窗口1共卖出"+count+"张");
		
	}

}




主类

package fire;
/**
 * 三个窗口合作卖票程序
 * 
 * 练习了Java的线程synchronized
 * @author hp
 *
 */
public class Ticket {
	static int tickets=50;
	public static void main(String[] args) {
		
		Ticket t = new Ticket();
		Seller1 s1 = new Seller1(t);
		Seller1 s2 = new Seller1(t);
		Seller1 s3 = new Seller1(t);
		s1.setName("win1");
		s2.setName("win2");
		s3.setName("win3");
		
		s1.start();
		s2.start();
		s3.start();
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: