伙计们,Runnable不是可以共享资源吗,为什么我的结果是这样的,奇怪。。。

这个程序的目的是用双线程跑数据,得出结果输出。(只想输出1个值)

当i等于10000时,单线程结果是13580.357929997872

http://img4.mukewang.com/59da0a9f0001449b06720467.jpg

http://img4.mukewang.com/59da0ab000018d8a06900614.jpg

双线程结果是:(怎么输出了两个值,还跟单线程的结果不一样)

http://img2.mukewang.com/59da0ad400013cee07090628.jpg



当i等于100000000时,单线程结果是1.3579357998825678E8

http://img4.mukewang.com/59da0b080001b03906680451.jpg

http://img3.mukewang.com/59da0b1a0001ab1c06780615.jpg

双线程结果是:(怎么输出了两个值,还跟单线程的结果不一样,而且这两个值还是两个不同的值)

http://img2.mukewang.com/59da0b3a00014a0a06750596.jpg


这结果太奇怪了。。。



付源码

package j120;

public class j1200 implements Runnable {
    double a=1;
    long i;
    

    public void run() {



            while(i<100000000) {

                a+=1.357935793;
                i++;
            }

        System.out.println(a);
    }

}


package j120;

public class j1201 {

    public static void main(String[] args) {
        j1200 a=new j1200();
        new Thread(a).start();
        new Thread(a).start();
    //    new Thread(a).start();
    //    new Thread(a).start();
    }

}



bug侠
浏览 1329回答 1
1回答

Developer_Zuck

你两次new的thread不是同一个对象,但这两个不同对象中的handle指向了同一个对象,所以前面的改变了a值时,后面取得的是对象本身内的值,也就是改变后的值如果你想得到两个线程运行的解果一样,需要再次创建一个j1200对象,运行后,结果一致。j1200 a = new j1200(); j1200 a2 = new j1200(); new Thread(a).start(); new Thread(a2).start();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java