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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zl78365336 中级黑马   /  2013-11-10 15:06  /  1884 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zl78365336 于 2013-11-10 17:58 编辑

请问各位师兄:
       《卖票的题》平常的方式:100张票售卖是正常的。
//<??可是用匿名内部类的方式却是售卖了400张票,麻烦各位师兄给点指导,谢谢!>
                 class Ticket  implements Runnable{
        private int tick = 100;
        public void run(){
                while(true){
                        if(tick>0)
                                System.out.println(Thread.currentThread().getName()+" sale: "+tick--);
                }
        }
}

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

//用匿名内部类的方式
public class TicketTest {
        public static void main(String[] args) {
                Runnable t = new Runnable(){
                        public void run(){
                                int tick = 100;
                                while(true){
                                        if(tick>0)
                                                System.out.println(Thread.currentThread().getName()+" zz_sale: "+tick--);
                                }
                        }
                };
                Thread t1 = new Thread(t);
                Thread t2 = new Thread(t);
                Thread t3 = new Thread(t);
                Thread t4 = new Thread(t);
               
                t1.start();
                t2.start();
                t3.start();
                t4.start();


评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

7 个回复

倒序浏览
目测你用不用匿名类卖出的都是400张吧
tick 要设成静态全局变量
回复 使用道具 举报
本帖最后由 wjj410830911 于 2013-11-10 15:56 编辑
public class 测试2 {
    public static void main(String[] args) {
            Runnable t = new Runnable(){
                    private  int tick = 100;         //将tick调成成员方法 并私有
                    public void run(){
                          
                            while(true){
                                    if(tick>0)
                                            System.out.println(Thread.currentThread().getName()+" zz_sale: "+tick--);
                            }
                    }
            };
            Thread t1 = new Thread(t);
            Thread t2 = new Thread(t);
            Thread t3 = new Thread(t);
            Thread t4 = new Thread(t);
            
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            }
    }

这个是正确的    测试证明   tick 不用设成静态全局变量 也是可以的   
  第2个匿名内部内 错在tick是局部变量了  写在run()方法下   应该是成员变量并且私有private

同时 小建议  你应该在判断下 把JAVA虚拟机在票卖完时关掉  

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 感谢回答

查看全部评分

回复 使用道具 举报
对,因为main()是static的,所以不用设静态
回复 使用道具 举报
请问这个程序,关JVM的具体代码是什么?
回复 使用道具 举报
本帖最后由 wjj410830911 于 2013-11-10 16:50 编辑
  1. while(true){
  2.                                     if(tick <= 0){   //添加一个判断   当票数等于0或小于0时   break退出
  3.                                             break;
  4.                                     }
  5.                                             System.out.println(Thread.currentThread().getName()+" zz_sale: "+tick--);
  6.                             }
复制代码
回复 使用道具 举报 1 0
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
       了解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马