开发者社区> 问答> 正文

实现Runnable接口的类使用for循环时不能处理同一个对象资源?

Runnable接口相比Thread类,可以实现对象资源共享我的代码是用for循环让多个线程数数,共10个数字,三个线程一起数结果三个线程给我数出30个数字来了我找过网上的博文,他们写的是卖票程序多个售票点(线程)一起售卖总共100张票我和他的代码进行对比,唯一的区别在于,循环计数时我用的是for循环,他用的是while于是我就修改了一下代码,发现用while循环就能实现我希望的:三个进程一起数10个数虽然实现了需求,但是我有疑问,为什么用for就会数出30个数?
请各位高手赐教,谢谢!
代码如下:
for循环的:

class Test22_06 implements Runnable{
    public void run(){
        for(int i=0; i<11; i++){
            System.out.println("线程" + Thread.currentThread().getName() + "数了第" + i + "个数字。");
        }
    }
}

public class JavaTest22_06{
    public static void main(String args[]){
        Test22_06 t = new Test22_06();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
    }
}

while循环的:

class Test22_06 implements Runnable{
    int i = 0;
    public void run(){
        while(i<11){
            System.out.println("线程" + Thread.currentThread().getName() + "数了第" + (i++) + "个数字。");
        }
    }
}

public class JavaTest22_06{
    public static void main(String args[]){
        Test22_06 t = new Test22_06();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
    }
}

展开
收起
蛮大人123 2016-02-25 15:00:41 3175 0
2 条回答
写回答
取消 提交回答
  • 注意变量的作用范围,下面那个例子i是实例变量

    2019-07-17 18:47:33
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    一个i是类的成员变量
    screenshot
    一个i是for循环的局部变量
    screenshot

    2019-07-17 18:47:33
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
对象的生命期管理 立即下载
继承与功能组合 立即下载