黑马程序员技术交流社区

标题: 当我启动线程时使用 count++ 为什么不是从1开始加的?? [打印本页]

作者: 回首、后_街    时间: 2013-4-11 18:27
标题: 当我启动线程时使用 count++ 为什么不是从1开始加的??
本帖最后由 回首、后_街 于 2013-4-17 21:27 编辑

这是生产者中的out方法:

public class Resource {
private String name;
private int count=1;
private boolean flag=false;
public synchronized void out(String name){
  while(flag){
   try{this.wait();}catch(Exception e){  }
    }
   this.name=name+"..."+count++;
    System.out.println(Thread.currentThread().getName()+"生产者.........."+this.name);
    flag=true;
    this.notifyAll();
  }
  当启动线程时出现:
Thread-3消费者..商品...44772
Thread-0生产者..........商品...44773
Thread-2消费者..商品...44773
Thread-1生产者..........商品...44774
Thread-3消费者..商品...44774
Thread-0生产者..........商品...44775
Thread-2消费者..商品...44775
Thread-1生产者..........商品...44776
Thread-3消费者..商品...44776
Thread-0生产者..........商品...44777
Thread-2消费者..商品...44777
Thread-1生产者..........商品...44778
Thread-3消费者..商品...44778
Thread-0生产者..........商品...44779
Thread-2消费者..商品...44779
Thread-1生产者..........商品...44780
Thread-3消费者..商品...44780
Thread-0生产者..........商品...44781
Thread-2消费者..商品...44781
Thread-1生产者..........商品...44782

--怎么不是从1开始的呢?????
  
作者: 熊永标    时间: 2013-4-11 18:33
这个很简单呀,就是因为计算机太快,但是打印窗口的缓冲区有限,当装下打印结果时,就会去掉最早的一部分,留着后面的部分.不是你的程序问题.
作者: 李永康    时间: 2013-4-11 19:01
你可以让打印一个之后休眠一段时间
作者: 张先龙    时间: 2013-4-11 19:11
一楼正解!
作者: 〃Mr.Zぐ    时间: 2013-4-11 20:01
私有的变量private int count=1只能在自己的类中调用,不能被其他类调用。主函数中的count没有重新赋值,所以该count是使用的当前内存中的值44772,不是你在Resource类中赋的1.
作者: 心弦上的景致    时间: 2013-4-11 20:37
线程执行和寄存器的调度有关系   而且U的响应速度你是感觉不出来的  你用sleep();做一个延迟  你就会看到了
作者: Keith    时间: 2013-4-11 23:02
需要sleep()休眠
作者: 杨永胜    时间: 2013-4-11 23:15
没有 静态  




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