java并发编程(1)火车票售票问题

Java的关于线程同步和互斥方面的策略有很多,比如synchronized、信号量、线程的wait和notify方法等等。讲解之前我们有必要区分对象、类和线程的所有权关系。首先声明一点:一个对象可以有多个线程共享,比如我们在一个类A中写十个内部类,这十个内部类都继承Thread类,然后类A中有十个属性,分别是十个内部线程类的对象,这种情况就属于多个线程共享一个对象;我们还必须清楚的认识到,一个类也可以有多个线程共享,比如我们有个类B继承了Thread类,我们在另外一个类中用循环new十个B的对象并启动线程,那么这十个线程就共享B类的所有静态属性。

下面一个一个来讲解:

我们先来看看原始的代码是怎样的,如下所示,这是一个售票的程序,共有十个售票员线程,想共同把150张票售完,代码如下所示:

_______________________________________________________________________________

public class SynchorizedTest implements Runnable{

    private static int num=150;     //表示总共的票数 150,所有对象共享

    private int seller;             //表示售票员的编号

    SynchorizedTest(int seller){    //构造方法  可以指定对象是哪个销售员

       this.seller=seller;

    }

    private void sell(){        //当前售票员的售票方法

       if(num>0){

           System.out.println("seller"+this.seller+":ticket"+num+" isselled!");

           num--;

       }

    }

    public static void main(String[] args) {

       for(int i=1;i<=10;i++){

           SynchorizedTest st=new SynchorizedTest(i);

           new Thread(st).start();

       }

    }

    @Override

    public void run() {         //每个售票员线程都执行相同的售票操作

       while(true){

           sell();

           if(num<=0)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值