猿问

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

在学习Java的多线程,看到Runnable接口的时候


写了一段小代码,有点搞不懂了


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();

    }

}


茅侃侃
浏览 398回答 1
1回答

沧海一幻觉

一个i是类的成员变量,&nbsp;int i = 0;&nbsp; &nbsp; public void run(){&nbsp; &nbsp; &nbsp; &nbsp; while(i<11){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }一个i是for循环的局部变量&nbsp; &nbsp; &nbsp; &nbsp; for(int i=0; i<11; i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; &nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答