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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小洋人最happy 中级黑马   /  2012-11-23 21:02  /  2249 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Ticket implements Runnable
{
        private int tick = 100;
        public void run()
        {
                while(true)
                {
                        if(tick>0)
                        {
                                System.out.printlm(Thread.currentThread().getName()+"....sales"+tick--);

                        }
                }
        }

}

class  TicketDemo
{
        public static void main(String[] args)
        {
                Ticket  t = new Ticket();
                Thread t1 = new Ticket(t);
                Thread t2 = new Ticket(t);
                Thread t3 = new Ticket(t);
                Thread t4 = new Ticket(t);
                t1.start();
                t2.start();
                t3.start();
                t4.start();



        }
}


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览
你没有写正确?

依你的程序应该是要加静态的。这样才能保证除主线外的四个线程

同时卖出总计100张票。
回复 使用道具 举报
class Ticket implements Runnable
{
         private int tick = 100;
         public void run()
         {
                 while(true)
                 {
                         if(tick>0)
                         {
                                 System.out.printlm(Thread.currentThread().getName()+"....sales"+tick--);

                        }
                 }
         }

}
这段代码有问题,正确写法如下:
public class Ticket implements Runnable{

        private int tick = 100;

        @Override
        public void run() {
                while (true) {
                        if (tick > 0) {
                System.out.println(Thread.currentThread().getName() + "卖出第" + (tick--) + "票");
                        }
                }
        }

}
你少了@Override
重写的标志
回复 使用道具 举报
{:soso_e100:}打印函数pringln拼写错误
Test类中没有带参数的构造方法,你new Test(t)当然不对了,Ticket t1 = new Ticket();就可以了
没事,多敲代码就OK了,以后看出错提示能够自己排查异常就行了

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
潘天功 发表于 2012-11-23 21:17
class Ticket implements Runnable
{
         private int tick = 100;

若是四个线程共享100张票,变量必须用static修饰即:private static int tick = 100,这样才能能达到多线程抢资源的效果
回复 使用道具 举报
Thread t1 = new Thread(t);
回复 使用道具 举报
李志阳 发表于 2012-11-23 21:29
Thread t1 = new Thread(t);

嗯 还得多练习呀
回复 使用道具 举报
是在找拼写错误还是找程序逻辑错误?
这样的控制逻辑来售票的话,会售出0号票甚至负数票的
需要对多线程访问共享资源进行同步
回复 使用道具 举报
吴兵 中级黑马 2012-11-24 13:56:57
9#
  1. class Ticket implements Runnable
  2. {
  3.         private int tick = 100;
  4.         public void run()
  5.         {
  6.                 while(true)
  7.                 {
  8.                         if(tick>0)
  9.                         {
  10.                                 System.out.println(Thread.currentThread().getName()+"....sales"+tick--);

  11.                         }
  12.                 }
  13.         }

  14. }

  15. class  TicketDemo
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Ticket  t = new Ticket();
  20.                 Thread t1 = new Thread(t);
  21.                 Thread t2 = new Thread(t);
  22.                 Thread t3 = new Thread(t);
  23.                 Thread t4 = new Thread(t);
  24.                 t1.start();
  25.                 t2.start();
  26.                 t3.start();
  27.                 t4.start();



  28.         }
  29. }
复制代码
1.楼主的输出语句 println  学错了
2.创建新的线程应该为Thread t1 = new Thread(t);
回复 使用道具 举报
楼主问的两个线程问题都是书写有问题  这个要细心啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马