2 qq 27263999 qq_27263999 于 2016.02.27 14:46 提问

Java问题!!!求指教

public class Demo {
private static int i = 10;
public static void main(String args []){
new Thread(new Runnable() { @Override
public void run() {
i++;
i++; }
}).run();
System.out.println(i); }
}

输出是什么,原因呢....

11个回答

shallynever
shallynever   2016.02.27 15:20
已采纳

首先要说的此代码中并没有开启新线程,因为开启一个线程是调用start()方法,在这里只是调用了run()方法,就像调用一般方法一样,调用run()方法之后
,i变量进行了两次自增操作,所以最后输出结果为:12 而且一定是12 ,没有楼上那个人说的那样结果。

shallynever
shallynever   2016.02.27 15:26

图片说明 就在我标红的地方调用了run()方法

caozhy
caozhy   Ds   Rxr 2016.02.27 15:10

System.out.println(i);这个可能先执行,也可能后执行,先执行输出10,后执行输出11或者12,结果不确定。

caozhy
caozhy   Ds   Rxr 2016.02.27 15:16

哦,看错了,结果是12,因为调用的是run,并没有启动新线程,所以是顺序执行。

zhanyiwen1
zhanyiwen1   2016.02.27 15:30

不知道,只觉得是这样的

u012784504
u012784504   2016.02.27 16:39

.start();................

u013853871
u013853871   2016.02.27 18:49

多线程要调用start()方法,如果只调用run()方法就像调用普通方法一样,所以结果就是i自增两次,输出结果为12

evan_man
evan_man   2016.02.28 09:33

12,肯定12;又不是开启线程,只是调用以下run方法,把它看成一个普通成员方法就行了;
真正开启线程执行Thread.start(),这样才结果未知

sun2015_07_24
sun2015_07_24   2016.02.27 14:57

12,启动这个线程i即行了两次加加

qq_27263999
qq_27263999 后面那个是 .run(),不是 .start() 这里没有启动线程。。。
接近 2 年之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.02.27 15:11

明显是12.。。线程启动,,i加了2次

qq_27263999
qq_27263999 后面那个是 .run(),不是 .start() 这里没有启动线程。。。
接近 2 年之前 回复
共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!