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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙茜茜 中级黑马   /  2013-6-11 21:22  /  2078 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙茜茜 于 2013-6-11 22:01 编辑

跟着视频写多线程卖票的小程序,和视频里有一点点不同。本该输出数字不同的10行,
但实际输出了12行,前头1或2号票会重复输出。
怎?么?回?事?啊?
  1. class MaiPiao extends Thread
  2. {
  3.         MaiPiao(String name)
  4.         {
  5.                 super(name);
  6.         }
  7.         private static int num=1;//因3个窗口不该重复同样的票,就用静态
  8.         public void run()
  9.         {
  10.                 for (;num<=100 ;num++)
  11.                 {
  12.                         System.out.println(this.getName()+"卖出-"+num+"-号票");
  13.                 }
  14.         }
  15. }
  16. class Testmp
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 MaiPiao a=new MaiPiao("窗口A--");
  21.                 MaiPiao b=new MaiPiao("窗口B--");
  22.                 MaiPiao c=new MaiPiao("窗口C--");
  23.                 a.start();
  24.                 b.start();
  25.                 c.start();
  26.         }
  27. }
复制代码
结果一般是这样


票.PNG (7.73 KB, 下载次数: 0)

票.PNG

评分

参与人数 1黑马币 +3 收起 理由
郭东生 + 3 赞一个!

查看全部评分

5 个回复

倒序浏览
没有加锁的原因吧。
回复 使用道具 举报
王靖远 发表于 2013-6-11 21:36
没有加锁的原因吧。

接受这个答案了
只是加锁的知识还没学到 :(
回复 使用道具 举报
王靖远 发表于 2013-6-11 21:36
没有加锁的原因吧。

再问一句,视频里老师也没有加锁,但他打出的结果不像我这样多两条,这怎么理解???
回复 使用道具 举报
孙茜茜 发表于 2013-6-11 22:54
再问一句,视频里老师也没有加锁,但他打出的结果不像我这样多两条,这怎么理解??? ...

老师打得不够多吧。保证不出现同样的票应该用锁而不是静态啊。
回复 使用道具 举报
yasyas001 来自手机 中级黑马 2013-6-19 09:17:12
地板
加静态只是为了让有共享数据有多个线程操作的时候能够使用同一个数据源,但无法保证数据不重复,。所以在方法或者代码块上加同步,多线程应该多测试几遍
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马