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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zc332750 中级黑马   /  2014-2-8 11:11  /  1407 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zc332750 于 2014-2-8 12:43 编辑

package demo;
class Ticket extends Thread{
        private static int tickets = 100;
        public void run(){
                while(true){
                        if(tickets>0){
                                System.out.println(getName()+"  卖出的第"+tickets--+"张票");
                        }
                }
        }
}
public class ThreadDemo {
        public static void main(String[] args) {
                Ticket t1 = new Ticket();
                Ticket t2 = new Ticket();
                Ticket t3 = new Ticket();
                Ticket t4 = new Ticket();
                t1.start();
                t2.start();
                t3.start();
                t4.start();               
        }
}

3 个回复

正序浏览
你面试过了?
回复 使用道具 举报
我把楼主的代码复制后运行了一遍,发现编译和运行都并未报错,只不过运行到tickes=0后程序并未停下来,还在运行,这是因为 while(true){
                         if(tickets>0){
                                 System.out.println(getName()+"  卖出的第"+tickets--+"张票");
                         }
                 }这个循环并未在tickets=0后跳出循环,程序还在一遍遍 的循环着,时间一长,便会内存溢出。楼主可以在if语句后边添加一个else{break;}来跳出循环!
回复 使用道具 举报
  while(true){
                        if(tickets>0)//线程经过判断后在此处休眠1、2、3,在线程4卖出最后一张票时
                                         //tickets = 0;然后线程1、2、3被唤醒继续执行可以被卖出
                                         //tickets ==0;tickets ==-1;tickets ==-2;
                        {
                                System.out.println(getName()+"  卖出的第"+tickets--+"张票");
                        }
                }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马