多线程售票程序
场景介绍
现实生活中,火车站售票厅都是多个窗口同时售票的,同一张票只能被一位乘客所买,当然我们可以去任意一个窗口买票,所以这些票是这些窗口的共享资源,需要对共享的资源进行处理否则就会出现一张票被多个人持有的现象这当然是不允许的。本程序就是模拟多线程售票案例,以同步方式来处理资源共享导致的线程安全问题。
通过继承Thread类来实现
TicketThread Code
/**
* @author xuyi3
* @2016年4月7日 @上午11:46:41
* @ThreadTicket
* @功能说明:通过继承Thread来实现多线程售票<br>
* @春风十里不如你
* @备注
*/
public class ThreadTicket extends Thread {
// 如果是继承Thread类的话,多线程只能通过使用静态变量来共享资源了,否则每个线程都有自己一份资源,不存在共享资源一说。
private static int tickets = 100;// 总工一百张票
//注意使用的是static final 修饰符
private static final Object obj = new Object();
// 给予售票线程一个自定义名字
public ThreadTicket(String name) {
setName(name);
}
@Override
public void run() {
while (true) {
synchronized (ThreadTicket.class) {// 使用obj也可以,但是注意obj是static final
// 即单例的不变的。
if (tickets >