黑马程序员技术交流社区
标题:
当我启动线程时使用 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