黑马程序员技术交流社区

标题: 在看视频多线程遇到的一个小问题,求大神帮忙看看,郁..... [打印本页]

作者: 々白点潜心ザ    时间: 2015-6-17 23:44
标题: 在看视频多线程遇到的一个小问题,求大神帮忙看看,郁.....
  1. class Ticket extends Thread
  2. {
  3.         private static int x=100;
  4.         public void run()
  5.         {
  6.                 while (true)
  7.                 {
  8.                         if (x>0)
  9.                         {
  10.                                 System.out.println(Ticket.currentThread().getName()+"..."+x--);
  11.                                 //x--;
  12.                         }
  13.                 }
  14.         }
  15. }

  16. class MaiPiaoDemo1
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Ticket t1=new Ticket();
  21.                 Ticket t2=new Ticket();
  22.                 Ticket t3=new Ticket();
  23.                 Ticket t4=new Ticket();

  24.                 t1.start();
  25.                 t2.start();
  26.                 t3.start();
  27.                 t4.start();
  28.         }
  29. }
复制代码
System.out.println(Ticket.currentThread().getName()+"..."+x--);这一行出的问题,如果是这样写,没有问题。但是如果写成
System.out.println(Ticket.currentThread().getName()+"..."+x);
x--;打印的结果前4行会输出100,之后就会正常了。
求解。。。

作者: 任志清-IOS    时间: 2015-6-18 00:07
看不懂。。。
作者: 小悟空et    时间: 2015-6-18 14:28
本帖最后由 小悟空et 于 2015-6-18 14:35 编辑

加上同步应该就没问题了。
好吧。我只试了试实现Runnable方法的买票程序同步。
继承的这方法的同步。。我还得试试


作者: 々白点潜心ザ    时间: 2015-6-18 20:12
小悟空et 发表于 2015-6-18 14:28
加上同步应该就没问题了。
好吧。我只试了试实现Runnable方法的买票程序同步。
继承的这方法的同步。。我还 ...

很感谢你的回答,昨天还没有看法到后面同步的视频,所以一直很疑惑,今天看了,自己理解了一下:
System.out.println(Ticket.currentThread().getName()+"..."+x--);的这种方式其实也是会出错的,只是分开来写的话,相对操作步骤就会多一步,线程就会切换掉,所以出错的概率就会很高。
其次,就是建立了多个线程的对象(跟继承runnable不一样,仅仅对一个对象进行操作),在这过程中,也会出现获取x值出现错误。。。

不知道理解的对不对,不对的话,还请大神指正:)

作者: Nemo    时间: 2015-6-18 20:33
如果上System.out.println(Ticket.currentThread().getName()+"..."+x--);这种写法在CPU看来是一句代码,一句代码是程序的原子操作,就是说是不可分割的,必须执行完才轮到其他线程,如果是第二种写法,那么算两句代码,程序是可能运行完第一句就轮到其他线程运行的,那么此时其他线程运行由于x还没--,所以还是打印100
作者: zlpiano    时间: 2015-6-18 22:17
认同楼上的看法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2