线程安全问题-synchronized(方法)火车票卖票代码演示

同步方法。
同步方法就是把synchronized关键字加到方法上,
格式: 修饰符 synchronized 返回值类型 方法名 (方法参数){}
同步方法的锁对象是什么?
this

同步静态方法。
同步静态方法就是把synchronized关键字加到静态方法上,
格式: 修饰符 static synchronized 返回值类型 方法名 (方法参数){}
同步静态方法的锁对象是什么?
类名.class(反射机制)

下面代码演示火车票买票。

package threadtest;

public class sellTickets implements Runnable {
	
private int tickets =100;
//private static int tickets=100;
private Object obj = new Object();
private int x=0;
	public void run() {
		while(true) {
			if(x%2==0) {
				//synchronized (obj) {同步方法
				synchronized (this) {
					//synchronized (sellTickets.class) { 静态方法
					if(tickets>0) {
						try {
							Thread.sleep(100);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						System.out.println(Thread.currentThread().getName()+"正在卖票"+tickets+"张票");
						tickets--;
					}
				}
			}else {
				sellticket();
				x++;
			}
		}
	}
	//这是同步安全锁的一种方法。
//	private void sellticket() {
//		// TODO Auto-generated method stub
//		synchronized (obj) {
//			if(tickets>0) {
//				try {
//					Thread.sleep(100);
//				} catch (InterruptedException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//				System.out.println(Thread.currentThread().getName()+"正在卖票"+tickets+"张票");
//				tickets--;
//			}
//		}
//	}
	private synchronized void sellticket() {
		
		//private static synchronized void sellticket() {  使用静态方法同步安全锁
		// TODO Auto-generated method stub
		if(tickets>0) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName()+"正在卖票"+tickets+"张票");
			tickets--;
		}
	}
           
}

测试类。

public class ontest {
	
	
	public static void main(String[] args) {
		
		sellTickets st = new sellTickets();
		
		Thread th1 = new Thread(st,"飞机");
		Thread th2 = new Thread(st,"高铁");
		Thread th3 = new Thread(st,"汽车");
		
		
		th1.start();
		th2.start();
		th3.start();
	}

}

结果如下
飞机正在卖票100张票
汽车正在卖票99张票
高铁正在卖票98张票
高铁正在卖票97张票
高铁正在卖票96张票
汽车正在卖票95张票
汽车正在卖票94张票
汽车正在卖票93张票
汽车正在卖票92张票
汽车正在卖票91张票
汽车正在卖票90张票
汽车正在卖票89张票
汽车正在卖票88张票
汽车正在卖票87张票
汽车正在卖票86张票
汽车正在卖票85张票
汽车正在卖票84张票
汽车正在卖票83张票
汽车正在卖票82张票
汽车正在卖票81张票
汽车正在卖票80张票
汽车正在卖票79张票
飞机正在卖票78张票
飞机正在卖票77张票
飞机正在卖票76张票
汽车正在卖票75张票
高铁正在卖票74张票
汽车正在卖票73张票
汽车正在卖票72张票
汽车正在卖票71张票
汽车正在卖票70张票
汽车正在卖票69张票
汽车正在卖票68张票
汽车正在卖票67张票
汽车正在卖票66张票
飞机正在卖票65张票
飞机正在卖票64张票
飞机正在卖票63张票
飞机正在卖票62张票
飞机正在卖票61张票
飞机正在卖票60张票
汽车正在卖票59张票
汽车正在卖票58张票
汽车正在卖票57张票
汽车正在卖票56张票
汽车正在卖票55张票
汽车正在卖票54张票
高铁正在卖票53张票
汽车正在卖票52张票
汽车正在卖票51张票
汽车正在卖票50张票
汽车正在卖票49张票
汽车正在卖票48张票
汽车正在卖票47张票
汽车正在卖票46张票
汽车正在卖票45张票
汽车正在卖票44张票
汽车正在卖票43张票
汽车正在卖票42张票
汽车正在卖票41张票
飞机正在卖票40张票
飞机正在卖票39张票
飞机正在卖票38张票
飞机正在卖票37张票
汽车正在卖票36张票
汽车正在卖票35张票
汽车正在卖票34张票
汽车正在卖票33张票
汽车正在卖票32张票
汽车正在卖票31张票
汽车正在卖票30张票
汽车正在卖票29张票
汽车正在卖票28张票
汽车正在卖票27张票
汽车正在卖票26张票
高铁正在卖票25张票
高铁正在卖票24张票
高铁正在卖票23张票
高铁正在卖票22张票
高铁正在卖票21张票
高铁正在卖票20张票
高铁正在卖票19张票
高铁正在卖票18张票
高铁正在卖票17张票
高铁正在卖票16张票
高铁正在卖票15张票
高铁正在卖票14张票
汽车正在卖票13张票
汽车正在卖票12张票
汽车正在卖票11张票
汽车正在卖票10张票
汽车正在卖票9张票
飞机正在卖票8张票
飞机正在卖票7张票
飞机正在卖票6张票
飞机正在卖票5张票
汽车正在卖票4张票
汽车正在卖票3张票
汽车正在卖票2张票
汽车正在卖票1张票

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值