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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-2-2 11:54 编辑

求大师指教;使用同步函数实现卖100张票。要求写两个类(主函数类:MainTest,线程类:ThreadTest),线程类实现Runnable接口。以下是一个Java视频给出的程序 请高手指教以下 我怎么运行不出来啊 而且还有几个地方看不懂,希望高手对每一执行语句标识以下 谢谢
以下给出程序:
public class MainTest {

       public static void main(String args[])

       {

              Thread t=new Thread(new ThreadTest());

              t.start();

       }

}

class ThreadTest implements Runnable{


       private int tickets = 100;

       public void run() {

              while(true)

              {

                     sale();

              }

       }

       public synchronized void sale()

       {

              if(tickets>0)

              {

                     try{

                            Thread.sleep(10);

                     }catch(Exception e)

                     {

                            e.printStackTrace();

                     }

                     System.out.println(Thread.currentThread().getName()+” is saling ticket “+tickets–);

              }

       }

}



3 个回复

倒序浏览
我可以运行出来,
System.out.println(Thread.currentThread().getName()+” is saling ticket “+tickets–);
上面的双引号要改为英文的,话说你就一个线程卖票,为什么需要同步函数呢?是不是你误解题意了?
回复 使用道具 举报
经过修改后能运行出来,问题就是后面System.out.println(Thread.currentThread().getName()+” is saling ticket “+tickets–);里面引号要用英文的,后面tickets少了个减号。
不知道你哪里看不懂哦,代码思路意思都很清楚哦。
回复 使用道具 举报
本帖最后由 鲁柯 于 2013-1-31 10:50 编辑

代码思路其实挺清楚的,里边有两个地方错误,字符串要用英文符号引起来,注意自减的两个减号
给你加了注释
没有缩进,重新编辑下

  1. <P style="LINE-HEIGHT: 30px; TEXT-INDENT: 2em"></P>class ThreadTest implements Runnable{
  2.     //要卖的总票数
  3.     private int tickets = 100;
  4.     //实现Runnable接口需要覆盖其中的run方法
  5.     public void run() {
  6.         //线程一启动,就开始不断执行卖票动作,所以要让循环一直转
  7.         while(true)
  8.         {
  9.             //开始卖票吧
  10.             sale();
  11.         }
  12.     }
  13.     //将卖票动作单独封装到一个方法中
  14.     public synchronized void sale()
  15.     {
  16.         //开卖前要先看下有没有票,没票就不用卖了吧
  17.         if(tickets>0)
  18.        {
  19.             //有票,开始模拟卖票动作
  20.             try{
  21.                    //让线程躺一会,算是在卖票
  22.                    Thread.sleep(10);
  23.             }catch(Exception e)
  24.            {
  25.                  //sleep有可能发生中断异常,处理一下
  26.                 e.printStackTrace();
  27.             }
  28.            //卖好了一张票,给个提示
  29.            //Thread.currentThread().getName()获得当前线程名字
  30.            //字符串不用解释了吧,注意要用英文标点符号的双引号
  31.            //tickets--卖掉一张票,总票数要减1,注意是两个减号
  32.            System.out.println(Thread.currentThread().getName()+" is saling ticket "+tickets--);
  33.        }
  34.     }
  35. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马