doraemongo 2008-12-25 11:08
浏览 171
已采纳

一个关于多处理器下多线程的问题,急

代码如下
[code="java"]public class Main {

int x = 0;
public class Runner implements Runnable
{
    public void run()
    {
        int current = 0;
        for(int i=0;i<4;i++)
        {
            current=x;
            System.out.println("The thread is "+Thread.currentThread().getName()+" 
                                and current is "+current+",");
            x=current+2;

        }
    }
}
public void go()
{
    Runner r1 = new Runner();
    [color=red]new Thread(r1,"thread1").start();
    new Thread(r1,"thread2").start();[/color]
}
 public static void main(String[] args)
{
    new Main().go();
}

}

[/code]
这个程序很简单,首先定义了一个实例变量X,初始值为0,然后实例化了一个runner,通过new Thread定义了两个线程(thread1和thread2),将runner的实例r1作为这两个线程的target,注意,这里两个线程用的是同一个target,所以这两个线程共享了实例变量x,按说这两个线程应该是对该变量进行加一操作,但是在我的电脑上,跑出来结果如下
init:
deps-jar:
compile-single:
run-single:
The thread is thread1 and current is 0,
The thread is thread1 and current is 2,
The thread is thread1 and current is 4,
The thread is thread1 and current is 6,
The thread is thread2 and current is 0,
The thread is thread2 and current is 2,
The thread is thread2 and current is 4,
The thread is thread2 and current is 6,
成功生成(总时间:0 秒)
请注意,这像是两个线程各自拥有一个x的复本,然后分别对自己拥有的x进行了循环+1的操作,而不是两个线程对同一个x进行+1操作。
按照教科书上的说法,因为两个线程共享同一个target,所以这两个线程应该共享同一个变量x,所以我想问问牛人,这是不是双核的原因?谢谢了

  • 写回答

1条回答 默认 最新

  • 不良校长 2008-12-25 21:58
    关注

    你的理解好像不对阿
    int x = 0; 是Main里面定义的,而且, 你的runable对象是内置类, 所以, 这2个线程是共享了这个变量, 这不是2个副本,
    另外, 由于你的循环次数小, 所以 new Thread(r1,"thread2").start();启动后还没有执行, 第一个THREAD就结束了。
    由于你没有并发控制 x 对象的访问, 出现这样的结果很正常。
    你把 x 定义成: AtomicInteger x = new AtomicInteger();
    这样就能控制并发了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算