多线程:模仿火车站售票

多线程:是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。
但是多线程有几个问题:要有被多个线程所共享的数据 多个线程并发的访问共享
的数据
比如接下来的旅客购买火车票例子
火车站售100张,同时有三个窗口在售票,怎么保证1窗口售的票和2窗口售的票不重复呢。简单来说是不是,1窗口售出票号1,要告诉通知2窗口,要不票号1拿出去。但是买是同步进行的。这个时候需要一个同步锁。
同步锁: 可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程将无法访问.

public static void main(String[] args) {
//创建线程对象,创建三个销售窗口
myeheadtest mynumber = new myeheadtest();
Thread t = new Thread(mynumber);
t.setName(“广州火车站窗口1”);
Thread t2 = new Thread(mynumber);
t2.setName(“广州火车站窗口2”);
Thread t3 = new Thread(mynumber);
t3.setName(“广州火车站窗口3”);
//启动线程对象
t.start();
t2.start();
t3.start();
}

public class myeheadtest implements Runnable {
int tickets = 100;//火车票数量
Object obj = new Object();

@Override
public void run() {
	//出售火车票
	while(true) {
		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--);
			}

}
}
}

}

最后看效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值