A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马王冬冬 于 2012-8-18 13:25 编辑
  1. public void start(){
  2.       pool.scheduleAtFixedRate(
  3.               new Runnable() {
  4.                       @Override
  5.                        public void run() {
  6.                        // TODO Auto-generated method stub
  7.                         if(tic.getTicNum() <= 0){
  8.                               System.out.println("第" + windowNum + "号窗口" + "门票售罄!");
  9.                                        pool.shutdownNow();
  10.                          }
  11.                                                 else if(((num = cus.serveCustomer()) == -1) && (tic.getTicNum() > 0)){
  12.                                                         System.out.println("第" + windowNum + "号窗口" + "暂无顾客,等待中");
  13.                                                         try {
  14.                                                                 Thread.sleep(1000);
  15.                                                         } catch (InterruptedException e) {
  16.                                                                 // TODO Auto-generated catch block
  17.                                                                 e.printStackTrace();
  18.                                                         }
  19.                                                 }
  20.                                                 else if((tic.getTicNum() > 0)){
  21.                                                         synchronized (tic) {
  22.                                                                 System.out.println("第" + windowNum + "号窗口" + "销售一张门票给第" + num + "位顾客");
  23.                                                                 tic.setTicNum(tic.getTicNum() - 1);//位置1
  24.                                                         }
  25.                                                 }
  26.                                         }
  27.                         },
  28.                         2,
  29.                         1,
  30.                         TimeUnit.MILLISECONDS);
  31.         }
复制代码
同学们,位置1处如何进行有效的同步?加同步代码块以后仍然很神奇的没有起作用,我记得毕老师曾经讲到过,哪位提示一下。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
我找到方法了,将位置一处进行如下修改
else if(tic.getTicNum() > 0){
        synchronized (tic) {
                tic.setTicNum(tic.getTicNum() - 1);//1号
                if(0 <= tic.getTicNum()){
                        System.out.println("第" + windowNum + "号窗口" + "销售一张门票给第" + num + "位顾客");//2号
                       
                        }
                }
        }
在同步方法中添加判断避免重复卖票,并调换1号和2号语句的位置,如果门票的数量不足,则不再卖票。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马