zgyant 2010-07-21 13:50
浏览 191
已采纳

Java中线程执行的疑问

大家好,我是学习java的新手,下面关于线程的问题有点搞不明白

下面是我的一个小程序,但是我每次运行出来的结果却不一样?这是为什么呢?

问题2:如果线程1占有了cpu,执行了run()方法,不是会一直循环到ticket=0才停止的么?

如果是这样的话,那线程2,线程3,线程4不是没有机会调用run()方法运行了?

问题3:如果这么随机运行的话,我们通过什么来控制多线程按我们想要的方式运行呢?

先谢谢大家帮忙,谢谢了

public class TicketSystem {
 public static void main(String[] args) {
  SellTicket st=new SellTicket();
  new Thread(st).start();//线程1
  new Thread(st).start();//线程2
  new Thread(st).start();//线程3
  new Thread(st).start();//线程4
 }

}
class SellTicket implements Runnable
{
 int ticket=20;
 public void run()
 {
  while(true)
  {
   if(ticket>0)
   {
    try{
     Thread.sleep(100);
    }
   catch(Exception e)
    {
     e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName()+"Have sold tickets "+ticket);
    ticket--;
   }
  }
 }
 
}

我的运行结果如下:

Thread-1Have sold tickets 20
Thread-0Have sold tickets 20
Thread-2Have sold tickets 20
Thread-3Have sold tickets 17
Thread-1Have sold tickets 16
Thread-2Have sold tickets 16
Thread-0Have sold tickets 16
Thread-3Have sold tickets 13
Thread-2Have sold tickets 12
Thread-0Have sold tickets 11
Thread-1Have sold tickets 10
Thread-3Have sold tickets 9
Thread-0Have sold tickets 8
Thread-1Have sold tickets 8
Thread-2Have sold tickets 8
Thread-3Have sold tickets 5
Thread-0Have sold tickets 4
Thread-1Have sold tickets 4
Thread-2Have sold tickets 4
Thread-3Have sold tickets 1
Thread-0Have sold tickets 0
Thread-1Have sold tickets -1
Thread-2Have sold tickets -2

  • 写回答

2条回答 默认 最新

  • hareamao 2010-07-21 14:04
    关注

    问题一:java不保证线程的运行次序,要由程序员自己维护。
    问题二:sleep的时候被踢出cpu了
    问题三:让线程等待,wait,直到被notify。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c