java火车站售票系统之多线程并发访问

/**
* Description: xxxx

* Copyright (c) , 2016, Jansonxu

* This program is protected by copyright laws.

* Program Name:ThreadSafeDemo.java

* Date: 2016年1月25日
*
* @author 李阳
* @version : 1.0
*/
package Safe;

public class ThreadSafeDemo5 {
private int num=100;
class Seller extends Thread{
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
/**
*
*/
public Seller() {
// TODO Auto-generated constructor stub
}

    public Seller(String name) {
        super(name);
    }
    //若是 this 的话 ! 指的是当前类 也就是这个Seller 有4个所以 this 并不靠谱!!!
    @Override
    public void run() {
        while(true){
            // 如果 ()  里边是 new String() 的话就不是同一把锁了 
            synchronized (String.class) {// 张学友拿到了 锁对象的一个 锁标记,此刻别的线程都老老实实等待着 等正处于执行状态的线程
                //释放锁标记  当前正处于运行状态的线程 执行完 同步代码块 之后 就会释放锁标记,此时锁对象的锁标记 就有可能被别的线程抢到
                // 谁抢到谁执行同步代码块里边的方法  抢锁  之前没锁 多个一起抢
                if(num<=0){// 放在外边 也会存在 多个一起进入的情况 并不是只进一个  上边只一个进入 就不存在这种情况了
                    break;
                }
                System.out.println(Thread.currentThread().getName()+"在出售"+num--+"张票");
                try {
                    //让当前线程睡眠片刻 使得别的线程 有机会执行
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
public static void main(String[] args) {
    ThreadSafeDemo5 instance=new ThreadSafeDemo5();
    Seller seller=instance.new Seller("json"); //查看字节码文件如果有的话 就会重用
    Seller seller1=instance.new Seller("张学友");
    Seller seller2=instance.new Seller("文章");
    Seller seller3=instance.new Seller("陈友谅");
    seller.start();
    seller1.start();
    seller2.start();
    seller3.start();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值