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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 回首、后_街 于 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开始的呢?????
  

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

7 个回复

倒序浏览
这个很简单呀,就是因为计算机太快,但是打印窗口的缓冲区有限,当装下打印结果时,就会去掉最早的一部分,留着后面的部分.不是你的程序问题.

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
你可以让打印一个之后休眠一段时间
回复 使用道具 举报
一楼正解!
回复 使用道具 举报
私有的变量private int count=1只能在自己的类中调用,不能被其他类调用。主函数中的count没有重新赋值,所以该count是使用的当前内存中的值44772,不是你在Resource类中赋的1.
回复 使用道具 举报
线程执行和寄存器的调度有关系   而且U的响应速度你是感觉不出来的  你用sleep();做一个延迟  你就会看到了
回复 使用道具 举报
Keith 中级黑马 2013-4-11 23:02:16
7#
需要sleep()休眠
回复 使用道具 举报
没有 静态  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马