java吧 关注:1,263,140贴子:12,761,910
  • 9回复贴,共1

问个线程的小问题,求解答

只看楼主收藏回复

各位大神在上,有礼了。
本来是个很简单的小代码,不知何故出了这般问题,各位大神见多识广,给瞅瞅呗。
代码很简单
class SellTicket implements Runnable
{
//描述票的数量
private int tickets=30;
//售票的动作,这个动作需要被多线程执行,那就是线程任务代码,需要定义在run方法中
//线程任务重工通常都有循环结构。
public void run(){
while(true){
if(tickets>=0)
System.out.println(Thread.currentThread().getName()+"-------"+"剩余"+tickets+"张票");//打印线程名称
tickets--;
}
}
}
class ThreadDemo3
{
public static void main(String[] args)
{
//创建Runnable接口的子类对象
SellTicket st=new SellTicket();
//创建四个线程对象,并将Runnable接口的子类对象作为参数传递给Thread的构造函数
Thread t1=new Thread(st);
Thread t2=new Thread(st);
Thread t3=new Thread(st);
Thread t4=new Thread(st);
//开启四个线程
t1.start();
t2.start();
t3.start();
t4.start();
}
}
输出也没什么问题

程序到这里都没有什么问题,也该结束了。
可是问题来了
在以上结束十多秒后突然一直跳出下面的内容

而且不手动结束,他会一直打印。
求大神告知,为什么会出现这种情况,我在代码里没看出什么问题啊


1楼2015-12-25 18:47回复
    求大神解答


    2楼2015-12-25 18:50
    回复
      2025-06-07 21:39:17
      广告


      3楼2015-12-25 18:51
      回复
        package test;
        class SellTicket implements Runnable
        {
        //描述票的数量
        private int tickets=30;
        //售票的动作,这个动作需要被多线程执行,那就是线程任务代码,需要定义在run方法中
        //线程任务重工通常都有循环结构。
        public void run(){
        while(tickets>=0){
        System.out.println(Thread.currentThread().getName()+"-------"+"剩余"+tickets+"张票");//打印线程名称
        tickets--;
        }
        }
        }
        public class ObjectTest2
        {
        public static void main(String[] args)
        {
        //创建Runnable接口的子类对象
        SellTicket st=new SellTicket();
        //创建四个线程对象,并将Runnable接口的子类对象作为参数传递给Thread的构造函数
        Thread t1=new Thread(st);
        Thread t2=new Thread(st);
        Thread t3=new Thread(st);
        Thread t4=new Thread(st);
        //开启四个线程
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        }
        }


        5楼2015-12-25 19:32
        回复
          循环没结束,而且这卖票得用同步代码块或者同步函数啊,不然四个人有可能卖同一张票


          来自iPhone客户端9楼2015-12-25 19:36
          回复
            越界


            IP属地:贵州来自Android客户端10楼2015-12-25 20:29
            回复
              越界了


              IP属地:北京11楼2015-12-25 22:09
              回复