帮帮忙!java中多线程运行累加和程序问题

class a implments Runable{
int i=0;
int s=0;
public void run(){
while(i<30000){
s=s+i;
i++;
System.out.println(s);
}
}
}
class b{
public static void main(String [] args){
a p=new a();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
}
}
经过我用表计算,表论有多少条 new Thread(p).start();最后结果出来后,程序运行的时间都是一样的,请问问题出现在哪呢

第1个回答  2006-02-02
因为循环次数大致一样,不论new Thread(p).start();有多少,i++这行语句都大约执行了30000次,如果只有一个new,则在一个线程中执行30000次i++,如果有2个new,在两个线程中一共执行大约30000次i++,每个线程不可能执行30000次i++,因为另外一个现成的i++也会改变i的值。

关键一点是,循环变量在各个线程中都是相同的,是同一个i,所以总循环次数是大致一样的。

之所以说大致一样,是因为在i++执行过程中线程调度的几率很小。如果恰好在这个时候调度,那么循环次数就不会是30000
第2个回答  2006-02-02
关键就在于你只new了一个a
new Thread(p).start();
只是启动了一个线程,无论你执行多少次new Thread(p).start();这些被启动的线程都“共享”域i本回答被提问者采纳

帮帮忙!java中多线程运行累加和程序问题
因为循环次数大致一样,不论new Thread(p).start();有多少,i++这行语句都大约执行了30000次,如果只有一个new,则在一个线程中执行30000次i++,如果有2个new,在两个线程中一共执行大约30000次i++,每个线程不可能执行30000次i++,因为另外一个现成的i++也会改变i的值。关键一点是,循环变量...

帮帮忙!java中多线程运行累加和程序问题 ?
多线程是为了进行同时进行又互相不影响的计算而设计的,你的累加是一个运算,虽然进行了很多步骤,但是还是一个运算~所以想把这个给拆掉似乎不大可能...

java中多线程的讲解及其应用
英文:Thread 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常...

java初学提问 关于执行过程 和继承的一些问题,请各位大虾帮忙 谢谢
1.首先,你的main方法是写在Demo类里的,当运行这个main方法时,执行A a = new A()时;需要new一个A类的对象,在new出这个对象之前,JVM会在堆中装载A类,这时候,会初始化A类的所有静态成员,所以static会被执行一次,然后执行new A()。不过,所有静态成员都只会初始化一次。(静态成员...

Java初学,求大神帮忙看看下面的Java程序哪里有问题。编译通过了,运行显 ...
一般是环境变量配置问题。如果环境变量确认正确看下是不是cmd命令在package下执行了。

java中请问如何等待一个线程结束在运行其他的代码?
伪代码如下:在a的代码中:b.start();\/\/启动b线程 synchronized(b) b.wait();\/\/a线程中采用同步,并进行等待 c.execute();在b线程结束时调用synchronized(this) notify();这样就可以达到b不结束,a线程就不会继续执行c。注释:如果看不明白建议先学习一下java线程同步机制。

java题目,请高手帮忙解决。
要在 iSeries 服务器上运行 Java 程序,您必须对集成文件系统中的类文件具有权限。程序一旦启动,它就在该用户权限控制下运行。 您可以使用沿用权限来访问具有运行程序的用户的权限和程序拥有者权限的对象。沿用权限临时地将用户原先无权访问的对象的权限授予用户。并发性:JAVA支持多线程技术,就是多个线程...

关于java运行问题。如下请大家帮忙分析一下吧?
虽然ls有人说这问题很学究,不过我觉得还是值得讨论的 说实话,在看到你这个题目的时候,我和你想的结果是一样的 但是运行结果确实是0,0,0,0,0 思考了一下,我觉得是因为java只有值传递没有引用传递造成的 num = num++;这道题我能不能看成这样 num = 0;temp = 0;num = temp ++;?根据...

请java高手帮忙,解决一个难题呀?心急呀!
在你的内容中首先你表达了求助的意思,然后应该是粘贴了一份其他其他来源的资料,在这两段之间最好有个过度性的转折,否则会感到很突兀。 最后的“几个需要注意的问题”最是奇怪,这是你提出的问题还是资料中别人提出的问题呢?我很难理解。好了。综上所述,目前我很难帮到你。希望你能够吧思路和...

找个JAVA高手帮忙分析下这段代码有什么问题,我在自学JAVA,现在写的这个...
有很多种可能哦,有可能是你的驱动有问题哦,你用的是2008还是2000还是2005,这些版本的驱动不同哦,还有在这里你没有用预处理,你为什么还要用preperStatement()这个方法呢,这样会降低效率的,没有预处理的时候还是用statement()吧

相似回答